STL-set and multiset

 

! ! ! ! set 中的元素总是保持单调递增。

set<int> a;

set的插入


set没有尾部插入函数push_back(),元素的插入一般使用insert进行动态检索插入。
a.insert(x):在集合中a中插入元素x,x 的类型必须与 set 的元素类型一致。如果插入的元素在set中已存在则会忽略
  int n,x;scanf("%d",&n);
  for(int i=1;i<=n;i++)
    {
      scanf("%d",&x);
      a.insert(x);
    }
set的遍历
begin(),end()返回值分别是set中首个元素的迭代器和set中末尾元素向后一位的迭代器。
(begin() 返回的迭代器指向set中的最小值)
rbegin() 返回的迭代器指向set中的最大值。
rend() 返回指向集合中第一个元素的前一个位置的迭代器
//正向迭代器
  set<int>:: iterator i;
  for(i=a.begin();i!=a.end();i++)
  printf("%d ",*i);printf("
");

//反向迭代器
  set<int>:: reverse_iterator i;
  for(i=a.rbegin();i!=a.rend();i++)
    printf("%d ",*i);printf("
");

其他函数

empty() size() clear()同样适用于set

erase(x):其中x可以是具体的数或迭代器。删除set中不存在的元素会被忽略。

find(x):返回x元素的迭代器,如果找不到x就返回end()的迭代器。

count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

lower_bound(x)返回set中大于等于x的最小元素的迭代器。 
upper_bound(x)返回set中大于x的最小元素的迭代器。如果找不到也会返回end()的迭代器。

multiset 


multiset和set的定义和成员函数都相同。

multiset和set的区别是:set插入的元素不能相同,但是multiset可以相同。

如果删除元素x,那么在定义的比较关系下和x相等的所有元素都会被删除。

count(x):set能返回0或者1,multiset是有多少个返回多少个。


 
光伴随的阴影
原文地址:https://www.cnblogs.com/forward777/p/10086986.html