STL : set & multiset

set和multiset都能对插入的元素进行自动排序,还能查前驱后继什么的,可以部分代替平衡树的功能。

使用STL虽然常数大,但是可以减少码量,避免手打平衡树出现错误,提高代码准确度。

set和multiset的区别就在于,set不支持重复元素,multiset支持重复元素。

所以这里以set为例,讲一下最最基本的函数~

定义set:set<int>s;

迭代器:set<int>::iterator xxx;

插入元素:s.insert(num);

删除元素:s.erase(num);

查询元素个数(multiset里比较有用):s.count(num);

前驱:lower_bound(num)-1;

后继:upper_bound(num);

set的头和尾:s.begin(),s.end()-1;(s.end()为空)

具体的看代码吧。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<set>
 5 
 6 // 迭代器 
 7 #define ite set<int>::iterator
 8 
 9 using namespace std;
10 
11 // 定义 
12 set<int>s;
13 
14 int main()
15 {
16     // 插入 
17     s.insert(5);
18     s.insert(6);
19     s.insert(15);
20     s.insert(20);
21     
22     // 最小值、最大值 
23     ite first,last;
24     first=s.begin();
25     last=s.end();last--;
26     printf("%d %d\n",*first,*last);
27     
28     // 前驱后继 
29     ite pre,post;
30     pre=s.lower_bound(10);pre--;
31     post=s.upper_bound(10);
32     printf("%d %d\n",*pre,*post); 
33     
34     // 删除元素 
35     s.erase(6);
36     
37     // 查询元素个数,multiset里比较有用 
38     printf("%d\n",s.count(6));
39     
40     // 前驱后继*2 
41     pre=s.lower_bound(10);pre--;
42     post=s.upper_bound(10);
43     printf("%d %d\n",*pre,*post);
44     
45     return 0;
46 }

注释是不是很良心QWQ

猜你喜欢

转载自www.cnblogs.com/eternhope/p/9664279.html