c++进阶STL::set容器常用语法

#include
#include
#include
using namespace std;

/*set容器 它底层使用平衡的搜索树——红黑树实现 默认会对元素排序
set只允许用一个值出现一次
*/

//set容器基本初始化
struct cmp
{
    bool operator()(const int& a, const int& b)
    {
        return a > b;
    }
};
void printTest(set& s)
{
    for (set::iterator it = s.begin(); it != s.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void printTest(set& s)
{
    for (set::iterator it = s.begin(); it != s.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
void test()
{
    int a[] = {0,1,5,6,3,8};
    set> s(a, a+5);        //默认从小到大排列,greater从大到小排列,下面基础赋值,定义形式要一样
    for (set::iterator it = s.begin(); it != s.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    set> s2(s.begin(), s.end());
    set> s3(s2);
    for (set::iterator it2 = s3.begin(); it2 != s3.end(); it2++)
    {
        cout << *it2 << " ";
    }
    cout << endl;
}

//set增删改查
void test2()
{
    set s;
    for (int i = 0; i < 5; i++)
    {
        s.insert(i);        //插入
    }
    printTest(s);
    int a[] = {5,2,6,10};        //相同的数插入时会失败(2)

    s.insert(a,a+4);
    printTest(s);

//    s.erase(2);    //删除单个数据
    printTest(s);

    set::iterator sBegin, sEnd;
    for (set::iterator it = s.begin(); it != s.end(); it++)
    {
        if (*it == 2)        //区间首部数据会被删除
        {
            sBegin = it;
        }
        else if (*it == 5)        //尾部数据不会被删除
        {
            sEnd = it;
            s.erase(sBegin, sEnd);
            break;
        }
    }

    printTest(s);
#if 0
    s.clear();//清空
    if (s.empty())    //判断是否为空
    {
        cout << "s为空~" << endl;
    }
    else
    {
        cout << "s不为空" << endl;
    }
#endif
    if (s.find(5) != s.end())    //查找单个元素,内部实现应该使用迭代器,没找到返回s.end()
    {
        cout << "5存在!" << endl;
    }
    else
    {
        cout << "5不存在!" << endl;
    }
}

//set容器其他操作
void test3()
{
    set s;
    for (int i = 0; i < 5; i++)
    {
        s.insert(i);        //插入
    }
    int a[] = { 5,2,6,10 };        //相同的数插入时会失败(2)

    s.insert(a, a + 4);
    printTest(s);

    cout << "第一个大于等于6的数据:" << *s.lower_bound(6) << endl;    //lower_bound返回第一个大于等于8的元素,返回的是一个迭代器
    cout << "第一个大于3的数据" << *s.upper_bound(3) << endl;        //upper_bound返回第一个大于3的元素,返回的是一个迭代器
}


//set容器自定义比较函数
void test4()
{
    set s;
    for (int i = 0; i < 5; i++)
    {
        s.insert(i);        //插入
    }
    printTest(s);

}
int main()
{
    //test();
    //test2();
    //test3();
    test4();
return 0;
}

你可能感兴趣的:(c++)