set常用操作 - STEMHA's Blog

set常用操作

基本概念

set是一个关联容器类型,用于以升序方式存储唯一值。

  • 属于关联容器(关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。)

特性

  • 遵循数学集合三特性,互异性、无序性、确定性。
  • 底层数据结构为红黑树,有序,不重复
  • set 容器只是单纯的键的集合。每个元素仅包含一个键(key),并有效地支持关于某个键是否存在的查询
  • set 容器存储的键也必须唯一,而且不能修改
  • set 容器以升序方式存储唯一值
  • set 不支持下标操作符
  • 和map一样,set无法存储无法比较大小的数据;

头文件

1
# include<set>

模板

1
set<int,greater<int> >q;

set初始化方法

1
2
set<int>q;
set<int> numbers {8, 7, 6, 5, 4, 3, 2, 1};

小的在前(less)/大的在前(greater)

默认的比较函数是 less,因此容器中的元素会升序排列。

1
2
set<int, less<int>> set1;    小的在前(less),升序
set<int, greater<int>> set1; 大的在前(greater),降序

参考:C++ STL set greater less详解

交换

swap(set<T>& other):和参数的元素进行交换,所包含对象的类型必须相同。:将当前 set 中的元素和参数 set 中的元素交换。它们需要包含相同类型的元素。也可以调用全局函数模板 swap() 来完成同样的操作。

1
2
void swap(set<T> &x) 重载1:x.swap(y)
void swap(set<T> &x, set<T> &y) 重载2: swap(x, y)

常用操作

插入

1
2
3
4
5
6
7
int a[] = {1,2,3,4,5};
set<int>q;

q.insert(elem)); 集合中插入元素
q.insert(a,a+5); 插入数组a至a+5的元素
q.insert(pos, elem); 在容器中插入元素elem的一份拷贝,并返回新元素的iterator位置;
q.insert(beg, end); 在容器中插入[beg, end)范围中所有元素的拷贝,没有返回值。

删除与清空

1
2
3
4
5
6
q.erase(iterator pos); 删除集合中的元素 无返回值
删除后pos不会自动++!被删除元素的迭代器,在删除之后失效!这里是和vector的区别

q.erase(iterator first, iterator last); 移除迭代区间[first,last)内的所有元素,无返回值
q.erase(value); 移除set容器内元素值为value的所有元素,返回移除元素的个数(size_type类型)
q.clear(); 删除set容器中的所有的元素,无返回值

大小/是否为空

1
2
3
q.size();     返回当前set容器中的元素个数
q.max_size(); 返回set容器可能包含的元素最大个数
q.empty(); 判断set容器是否为空

find和count

1
2
q.find(element); 返回element值位置的迭代器,找不到返回q.end()
q.count(); 返回某个值元素的个数(根据set的特性,就是判断这个元素在不在,返回01)

迭代器

1
2
3
4
q.begin();   //返回头位置迭代器
q.end(); //返回尾位置迭代器
q.rbegin(); //返回尾部反向迭代器 注意是set<int,greater<int>>::reverse_iterator
q.rend(); //返回头部反向迭代器

大于等于元素的迭代器

1
2
q.lower_bound(); 返回指向大于(或等于)某值的第一个元素的迭代器
q.upper_bound(); 返回大于某个值元素的迭代器

参考资料

C++ set初始化(STL set初始化)详解
C++标准库容器类概述
C++ STL set greater less详解

本文许可证

本文遵循 CC BY-NC-SA 4.0(署名 - 非商业性使用 - 相同方式共享) 协议,转载请注明出处,不得用于商业目的。
CC BY-NC-SA 4.0

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×