#143. 数据结构-set和unordered_set集合

数据结构-set和unordered_set集合

知识点

set 是按照特定顺序存储唯一元素的容器,即自带排序和去重。它非常适合处理需要同时兼顾查找、插入和删除的情况。元素放入 set 后不支持修改,但可以删除。

和数学中的集合相似,set 中不会出现值相同的元素,如果需要有相同元素,则可以使用 multisetmultiset 除了此特性之外,其他地方与 set 没啥区别,所以不再单独介绍。

创建一个set:

set<类型> 名字;

set的常用操作方法:

s.insert(x) 当容器中没有等价元素的时候,将元素 x 插入到 set 中。
s.erase(x) 删除值为 x 的所有元素,返回删除元素的个数。
s.clear() 清空 set。
s.count(x) 返回 set 内键为 x 的元素数量。
s.find(x) 在 set 内存在键为 x 的元素时会返回该元素的迭代器,否则返回 end()。
s.empty() 返回容器是否为空。
s.size() 返回容器内元素个数。

unordered_set 用法类似,只不过不会排序,所以插入、查找、删除的时间复杂度均为O(1)O(1)

输出方法:

set<int> s;
s.insert(1);
s.insert(3);
s.insert(6);
for (auto it:s)
  cout << it << " ";

for (auto it = s.begin(); it!=s.end(); it++)
	cout << *it << " ";

练习:使用set完成下面的题目

给定n个不同的随机整数,去掉重复的数后按顺序从小到大输出。

输入格式

 第1行为1个正整数N,表示随机数的个数

 第2行有N个用空格隔开的正整数,为给定的随机数。

输出格式

第1行为1个正整数M,表示不相同的随机数的个数。第2行为M-1个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

样例

10
20 40 32 67 40 20 89 300 400 15
8 
15 20 32 40 67 89 300 400