#143. 数据结构-set和unordered_set集合
数据结构-set和unordered_set集合
知识点
set 是按照特定顺序存储唯一元素的容器,即自带排序和去重。它非常适合处理需要同时兼顾查找、插入和删除的情况。元素放入 set 后不支持修改,但可以删除。
和数学中的集合相似,set 中不会出现值相同的元素,如果需要有相同元素,则可以使用 multiset,multiset 除了此特性之外,其他地方与 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 用法类似,只不过不会排序,所以插入、查找、删除的时间复杂度均为。
输出方法:
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