C++ set容器

set/multiset属于关联式容器,所有元素都会在插入时自动被排序,底层结构是用红黑树实现的。 set和multiset区别:

  • set不可以插入重复数据,而multiset可以
  • set插入数据的同时会返回插入结果,表示插入是否成功
  • multiset不会检测数据,因此可以插入重复数据 ## set构造和赋值
    1
    2
    3
    4
    5
    //构造:
    set<T> st; //默认构造函数:
    set(const set &st); //拷贝构造函数
    //赋值:
    set& operator=(const set &st); //重载等号操作符
    1
    2
    3
    4
    5
    ## set大小和交换
    ``` C++
    size(); //返回容器中元素的数目
    empty(); //判断容器是否为空
    swap(st); //交换两个集合容器
    ## set插入和删除
    1
    2
    3
    4
    5
    insert(elem); //在容器中插入元素。
    clear(); //清除所有元素
    erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
    erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
    erase(elem); //删除容器中值为elem的元素。
    ## set查找和统计
    1
    2
    find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
    count(key); //统计key的元素个数
    ## pair对组创建 成对出现的数据,利用对组可以返回两个数
    1
    2
    pair<type, type> p ( value1, value2 );
    pair<type, type> p = make_pair( value1, value2 );
    ## set容器排序 set容器默认排序规则为从小到大,可通过仿函数改变排序规则:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class MyCompare
    {
    public:
    bool operator()(int v1, int v2)
    {
    return v1 > v2;
    }
    };
    创建:``set<int,MyCompare> s2;``