Set和Multisets

set和multiset会根据特定的排序准则,自动将元素排序。两者不同在于multisets允许元素重复而set不允许。

STL学习笔记(关联式容器)

1.set和multiset的操作函数

生成、复制和销毁

set c              //产生一个空的set/multiset,其中不含任何元素
set c(op)          //以op为排序准则,产生一个空的set/mulitset
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,以less<>(operator<)为排序准则
set<Elem,op>      //一个set,以op为排序准则
multiset<Elem>    //一个multiset,以less<>(operator<)为排序准则
multiset<Elem,op> //一个multiset,以op为排序准则

特殊的搜寻函数

count(elem)       //返回“元素值为elem”的元素个数
find(elem)        //返回"元素值为elem"的第一个元素的位置,如果找不到就返回end()
lower_bound(elem) //返回elem的第一个可安插位置,也就是“元素值>=elem”的第一个元素位置
upper_bound(elem) //返回elem的最后一个可安插位置,也就是“元素值>elem”的第一个元素位置
equal_range(elem) //返回elem可安插的第一个位置和最后一个位置,也就是“元素值==elem”的元素区间

下面是后面三个函数的一个例子

 1 #include <iostream>
 2 #include <set>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     set<int> c;
 8     c.insert(1);
 9     c.insert(2);
10     c.insert(4);
11     c.insert(5);
12     c.insert(6);
13     cout<<"lower_bound(3): "<<*c.lower_bound(3)<<endl;
14     cout<<"upper_bound(3): "<<*c.upper_bound(3)<<endl;
15     cout<<"equal_range(3): "<<*c.equal_range(3).first<<" "<<*c.equal_range(3).second<<endl;
16     cout<<endl;
17     cout<<"lower_bound(5): "<<*c.lower_bound(5)<<endl;
18     cout<<"upper_bound(5): "<<*c.upper_bound(5)<<endl;
19     cout<<"equal_range(5): "<<*c.equal_range(5).first<<" "<<*c.equal_range(5).second<<endl;
20 }
View Code

相关文章: