STL 集合类

集合类简介

  • 集合让程序员能在容器中快速的查找键(键:存储在一维容器中的值)
  • set和multiset之间的区别就是set中的值唯一,multiset中的值可以不唯一。
  • 为实现快速搜索,集合的内部结构像二叉树,插入数据时对其进行排序。
  • #include <set>

实例化

以set为例,multiset同样

1 set<int> setA;
2 set<int,Descending> setB;
3 set<int> setC(setA);
4 set<int> setD(setB.cbegin(),setB.cend());

 

插入元素

1 setA.insert(-1);
2 setB.insert(setA.cbegin(),setA.cend());

 


 

查找元素

查找第一个与给定值匹配的元素

1 auto iElementFound = setA.find(-1);

 


 

删除元素

成员函数erase(),通过键删除值,相同的元素全部删除

1 setA.erase(-1);
2 setA.erase(setA.cbegin(),setA.cend());

 


 

set和multiset的优缺点

对需要频繁查找的应用程序来说,STL  set和multiset很有优势,因为其内容是经过排序的,因此查找速度更快。然而,为提供这种优势,容器在插入元素时进行排序。因此,插入元素时有额外开销,因为需要对元素进行排序——如果应用程序将频繁使用find()等函数,则这种开销是值得的。


STL散列集合实现std::unordered_set和std::unordered_multiset

  • #include <unordered_set>
  • 插入和排序时间固定
  • 有一个负责确定排列顺序的散列函数
1 unordered_set<int> usetA;
2 auto HFn = usetA.hash_function();

其他

set::size()指出容器包含多少个元素。

multiset::count(value)确定有多少个元素包含特定的值。

 

posted @ 2014-04-18 09:50  猫了个妖喵  阅读(218)  评论(0编辑  收藏  举报