Set和Multisets
set和multiset会根据特定的排序准则,自动将元素排序。两者不同在于multisets允许元素重复而set不允许。
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 }