STL-set&&multiset 集合

Posted jishuren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL-set&&multiset 集合相关的知识,希望对你有一定的参考价值。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <set>
 4 
 5 // 仿函数的原型
 6 //struct greaters
 7 //{
 8 //    bool operator()(const int &left,const int &right) const
 9 //    {
10 //        return left>right;
11 //    }
12 //};
13 
14 using namespace std;
15 
16 int main()
17 {
18     // set容器,元素具有唯一性,但与寻常集合 不同,它是有序的
19     // 元素必修顺序插入,不能在指定位置插入
20     // 内部结构为红黑二叉树,加入数据的效率居然比vector还快?反正我信了
21 
22     // list与vec的比较
23     //对于忘list中插入数据,很好理解,分配一个新的结点空间,添加到链表尾部即可
24     //对于往vectorz中添加数据,需要判断当前控件是否够用,不够用的话需要再次分配稍大的一些空间
25     // 然后把已有的元素拷贝到新的空间区域,然后释放已有的空间。
26     // 也许有人觉得这个拷贝操作很费时,觉得没有list添加的速度快,然而,事实并不是这样…..
27 
28     // 好了,再回归set
29     // insert,插入函数,重复失败,返回pair类型
30     // 复杂的数据类型,需要用仿函数确定元素的顺序
31 
32     set<int> set1;
33     set1.insert(10);
34     set1.insert(20);
35     set1.insert(5);
36 
37     for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
38     {
39         cout<<*it<< ;
40     }
41     cout<<endl;
42 
43     set1.erase(set1.begin());
44 
45     for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
46     {
47         cout<<*it<< ;
48     }
49     cout<<endl;
50 
51     // 默认是从小到大的顺序
52     // set<int,less<int>> set1;
53     // 从大到小的顺序是
54 
55     // set<int,greaters<int>> set2;
56 
57     pair<set<int>::iterator,bool> pair1=set1.insert(50);
58     cout<< *pair1.first <<endl;
59     if(pair1.second==true)
60     {
61         cout<<"YES"<<endl;
62     }
63 
64     pair1=set1.insert(20);
65 
66     cout<<pair1.second<<endl;
67 
68 
69     // set的数据查找
70     // lower_bound
71     // upper_bound
72     // equal_bound
73 
74     // 查找小于等于10的元素的位置
75     cout<<*set1.lower_bound(10)<<endl;
76     // 查找大于20的元素的位置
77     // 注意,这里没有等于哈
78     cout<<*set1.upper_bound(20)<<endl;
79 
80     for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
81     {
82         cout<<*it<< ;
83     }
84     cout<<endl;
85 
86     // 查找大于等于20的元素的位置
87     cout<<* set1.equal_range(20).first<<endl;
88     cout<<* set1.equal_range(20).second<<endl;
89 
90     // multiset ,元素可以重复,其余基本操作相似
91 
92      return 0;
93 }

 

以上是关于STL-set&&multiset 集合的主要内容,如果未能解决你的问题,请参考以下文章

set & multiset关联式容器 -C++

[STL] set & multiset

STL使用————SET&MULTISET

STL——容器(Set & multiset)的迭代器

STL——容器(Set & multiset)的迭代器

STL——容器(Set & multiset)的删除 erase