一、set和multiset 的介绍和使用
1、set
1、set的介绍
- set是按照一定次序存储元素的容器,在set 中,元素的 value也标识它(value就是key,类型为T),并且每个value必须是唯一的,set 中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或者删除他们;
- 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序;
- set容器通过key访问单个元素的速度通常比 unordered_set 容器慢,但是它们允许根据顺序对子集进行直接迭代;
- set在底层使用红黑树实现;
2、set的使用
void SetTest() {
int array[] = {1,2,3,4,5,6,7,8,9,9,9,9,9,4,4,5,6,7,5};
set<int> s(array, array + sizeof(array) / sizeof(int));
cout << s.size() << endl;
for (auto x : s)
cout << x << " ";
cout << endl;
for (auto it = s.rbegin(); it != s.rend(); ++it)
cout << *it << " ";
cout << endl;
cout << s.count(3) << endl;
}
3、set的注意点
- 与 map/multimap 不同的是,map/multimap中存储的是真正的键值对<key,value>,set 中只放 value,但与底层实际存放的是由<value,value>构成的键值对;
- set中插入元素时,只需要插入 value 即可,不需要构造键值对;
- set中的元素不可以重复;
- 使用set 的迭代器遍历 set中的元素,可以得到有序序列;
- set中的元素默认按照小于来比较
- set中查找某个元素,时间复杂度为:log2N;
2、multiset
1、multiset的介绍
- multiset 在底层中存储的是<key,value>的键值对;
- multiset的插入接口只需要插入即可;
- 与set的区别是,multiset中的元素是可以重复的,set 中的 value 是唯一的;
- 使用迭代器对 multiset 中的元素进行遍历,可以得到有序的序列;
- multiset中的元素不能修改;
- 在multiset中找某个元素,时间复杂度为 O(log2N);
- multiset的作用:可以对元素进行排序
2、multiset的使用
void MultisetTest() {
int array[] = { 1,2,3,4,5,6,7,8,9,4,5,6 };
multiset<int> s(array, array + sizeof(array) / sizeof(int));
for (auto x : s)
cout << x << " ";
cout << endl;
}