zoukankan      html  css  js  c++  java
  • STL中set和multiset小结

    (1)使用set/multiset之前必须包含头文件<set>:#include<set>
      
    (2)namespace std{
         template <class T, class Compare = less<T>,
                   class Allocator = allocator<T> >
         class set;    
          template <class T, class Compare = less<T>,
                   class Allocator = allocator<T> >
         class multiset;   
        }
    只要是assignable、copyable、comparable的型别T都可以成为set或multiset的元素型别。
    set/multiset的排序准则必须是strict weak ordering其意义是:1必须是反对称的,对判断式op而言,如果op(x,y)为真则op(y,x)为假。2必须是可传递的,如果op(x,y)为真且op(y,z)为真则op(x,z)。3必须是非自反的,op(x,x)永远为假。
      
    (3)set/multiset通常都是以平衡二叉树来实现的,事实上set/multiset的实现版本大多以红黑树来实现,它保证节点安插时最多只会做两个重新连接动作,而且到达某一元素的最长路径最多只是最短路径深度的两倍。
      
    (4)set/multiset的操作函数:
    set c      产生一个空set/multiset
    set c(op)      以op为排序准则产生一个空set/multiset
    set c1(c2)      产生某一个set/multiset的副本
    set c(beg, end)      以区间[beg, end)内的元素产生一个set/multiset
    set c(beg, end, op)    以op为排序准则,以区间[beg, end)内的元素产生一个set/multiset
    c.~set()      销毁所有元素,释放内存
    其中set可为下列形式:set<Elem>、set<Elem, op>、multiset<Elem>、multiset<Elem, op>
      
    c.size()      返回当前的元素数量
    c.empty()      判断c是否为空
    c.max_size()      返回可容纳的元素最大数值
    c1 compare c2      compare可为==,!=,<,>,<=和>=
      
    c.count(elem)      返回“元素值为elem”的元素个数
    c.find(elem)      返回“元素值为elem”的第一个元素的迭代器,如果找不到就返回end()
    c.lower_bound(elem)      返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个元素位置
    c.upper_bound(elem)      返回elem的最后一个可安插位置,也就是“元素值>elem”的第一个元素位置
    c.equal_range(elem)      返回elem的第一个和最后一个位置,也就是“元素值==elem”的第一个元素区间,返回值为将lower_bound()和upper_bound()的返回值做成一个pair返回
      
    c1 = c2      将c2全部元素赋值给c1
    c1.swap(c2)      将c1和c2元素互换
      
    c.begin()      返回一个双向存取迭代器(将元素视为常数),指向第一个元素
    c.end()      返回一个双向存取迭代器(将元素视为常数),指向最后元素的下一个位置
    c.rbegin()      返回一个逆向迭代器,指向逆向迭代的第一个元素
    c.rend()      返回一个逆向迭代器,指向逆向迭代的最后元素的下一个位置
      
    c.insert(elem)      插入一个elem副本并返回新元素的位置
    c.insert(it, elem)      安插elem副本返回新元素的位置(it是一个提示指出安插操作的搜寻起点)
    c.insert(beg, end)      插入区间[beg, end)内的所有元素副本,无返回值
    c.erase(elem)      移除“与elem相等”的所有元素,返回被移除元素的个数
    c.erase(it)      移除it位置上的元素,无返回
    c.erase(beg, end)      移除[beg, end)区间内的所有元素,无返回
    c.clear()      将容器清空
    set提供如下接口:
    pair<iterator, bool> insert(const value_type& elem);
    pair结构中的second成员表示安插是否成功;first成员返回新元素的位置或返回现存的同值元素位置
    iterator insert(iterator pos_hint, const value_type& elem);
    multiset提供如下接口:
    iterator insert(const value_type& elem);
    iterator insert(iterator pos_hint, const value_type& elem);
     
  • 相关阅读:
    一起学习Avalonia(八)
    国产下的netcore
    一起学习Avalonia(七)
    一起学习Avalonia(六)
    一起学习Avalonia补充(deepin下的使用开发t调试)
    一起学习Avalonia(五)
    一起学习Avalonia补充(Linux下的使用开发)
    一起学习Avalonia(四)
    一起学习Avalonia(三)
    html页面边框的简单设置方法
  • 原文地址:https://www.cnblogs.com/LUO257316/p/3287437.html
Copyright © 2011-2022 走看看