【C++自学笔记】STL-详细解析set、mulitset(关联式容器)

一、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;
}

发布了79 篇原创文章 · 获赞 28 · 访问量 7760

猜你喜欢

转载自blog.csdn.net/weixin_43753894/article/details/100016320