C++学习笔记之STL标准库(六)set/multiset 关联容器

包含头文件 #include <set>  声明命名空间using namespace std;

set/multiset是关联容器的一种,它们会对存储的元素进行自动排序,存储元素的值不能直接的被改变,只能通过删除旧值,再插入新值的方式达到更改元素值的目的。set不允许元素的值有重复,而multiset允许有重复的元素,这是他们的唯一区别。关联容器set, multiset以及后面的map, multimap内部采用的是一种非常高效的平衡检索二叉树:红黑树。

1)构造函数

  set(); //创建一个空的set,如:set<int> a;

  multiset(); //创建一个空的multiset,如 :multiset<int> a;

  set(const Pred& comp); //创建一个空的set,指定排序规则按照comp方式

  如:struct comp //指定按照从大到小的顺序排序存储
    {
       bool operator()( const int &a, const int &b ) const
       {
          return a>b;
       }
    };

  multiset(const Pred& comp); //创建一个空的multiset,指定排序规则按照comp方式

  set(const set& x); //set拷贝构造函数

  multiset(const multiset& x); //multiset拷贝构造函数

  set(InIt first,InIt last); //复制序列[first,last)序列内的元素到set中

  multiset(InIt first,InIt last); //复制序列[first,last)序列内的元素到multiset中

  set(InIt first,InIt last,const Pred& comp); //复制序列[first,last)序列内的元素到set中,并指定排序规则按照comp方式

  如: int ia[6] = {50,10,60,20,30,100};
     set<int,comp> a(ia,ia+6);
     set<int,comp>::iterator iter;
     for(iter=a.begin();iter!=a.end();iter++)
     {
          cout<<*iter<<endl;
     }

  程序输出:

  multiset(InIt first,InIt last,const Pred& comp); //复制序列[first,last)序列内的元素到multiset中,并指定排序规则按照comp方式

2)遍历函数

  iterator begin(); //返回set/multiset头指针,指向第一个元素

  iterator end(); //返回set/multiset尾指针,指向set/multiset最后一个元素的下一个位置

  reverse_iterator rbegin(); //反向迭代器,指向最后一个元素

  reverse_iterator rend(); //反向迭代器,指向第一个元素之前的位置

3)判断函数

  bool empty() const; //被控序列为空时,该成员函数返回true

4)大小函数

  size_type size() const; //返回被控序列的长度

  size_type max_size() const; //返回容器对象所能控制的最长序列的长度

5)插值函数

  iterator insert(const T& val); //multiset,插入元素val,并自动排序

  pair<iterator,bool> insert(const T& val); //set,插入元素val,并自动排序,为什么返回是pair呢,pair里有一个bool形变量,标志插入是否成功,因为set不允许有重复的元素,因此插入元素时,需要判断容器内是否已经存在该值

  iterator insert(iterator it,const T& val); //指定在迭代器it处插入元素值val。注意,it只是一个参考位置,因为set、multiset是自动排序的,所以最终是按照插入元素值的大小来决定插入位置的,而这个输入的插入位置只是在程序员了解序列元素位置时给出的参考位置,可能会加快插入速度

  void insert(InIt first,InIt last); //对序列[first,last)中的每一个元素调用一次insert(*it)

6)删除函数

  iterator erase(iterator it); //删除被控序列中迭代器it所指定的元素

  iterator erase(iterator first,iterator last); //删除被控序列中区间[first,last)内所有元素

  size_type erase(const Key& key); //删除元素值等于key的元素,并返回删除的元素个数

  void clear(); //清空被控序列

7)其他操作函数

  void swap(set& x); //交换set元素

  void swap(multiset& x); //交换multiset元素

  key_compare key_comp() const; //返回一个用于元素间值比较的函数

  value_compare value_comp() const; //返回一个用于比较元素间的值的函数

  iterator find(const Key& key) const; //查找功能,返回元素值等于key的迭代器指针

  size_type count(const Key& key) const; //返回容器中元素等于key的元素的个数,由于一个键值在set只可能出现0或1次,因此在set中可以用来判断某一键值是否出现在set中

  iterator lower_bound(const Key& key) const; //返回容器中值大于等于key的迭代器指针

  iterator upper_bound(const Key& key) const; //返回容器中值大于key的迭代器指针

  pair<iterator,iterator> equal_range(const Key& key) const; //返回一对迭代器,分别表示第一个大于或等于key的元素和第一个大于key的元素,返回值是一个pair类型

猜你喜欢

转载自www.cnblogs.com/jason-20160301/p/8955767.html
今日推荐