c++ set
set基本用法
C++ 标准库中的 <set>
是一个关联容器,它存储了一组唯一的元素,并按照一定的顺序(从小到大)进行排序。
在使用前,需要引头文件 #include <set>
声明set容器:
1 |
|
常用操作:
1 |
|
insert()
单个元素插入
insert(value)函数会返回一个pair第一个值为一个迭代器,第二个位置为一个布尔值。
- 插入成功
插入成功时,第一个迭代器会指向插入成功的元素所在的位置;第二个布尔值为true。 - 插入失败
插入失败是因为集合中已经有了相同的元素,所以第一个迭代器会返回相同元素的位置,第二个布尔值为false。
我们可以通过 result.first
和 result.second
来访问第一个和第二个参数。
1 |
|
范围插入
insert(first,last),接收两个迭代器first和last表示插入的范围 [first, last)
,这两个迭代器可以来自任何符合标准的容器(如 std::vector
、std::list
等),此时它没有返回值。
1 |
|
erase()
通过值删除元素
通过set.erase(value)来删除集合中的元素,此时返回一个 size_t
类型,表示删除的元素个数,即是否成功删除,1表示成功删除,0表示value不存在。
1 |
|
范围删除
erase(first,last),接收两个迭代器first和last表示删除的范围 [first, last)
,会删除所有这些迭代器中的值,这两个迭代器可以来自任何符合标准的容器(如 std::vector
、std::list
等),此时它没有返回值。
1 |
|
find()
set.find()
的返回值是一个 迭代器 ,指向集合中与指定值匹配的元素。如果找到了指定的值,find()
会返回指向该值的迭代器;如果找不到,则返回 set.end()
迭代器。
1 |
|
size()
set.size()
的返回值是一个 size_t
类型的非负整数,表示集合中元素的个数。
1 |
|
empty()
set.empty()
的返回值是一个布尔值,表示集合是否为空。
1 |
|
set运算
注意,c++算法库中自带取并集,交集,差集功能。但是在头文件 #include<algorithm>
中。
因此,取并集,交集,差集功能并非只有set可用,对于vector等照样可以使用。
取并集 set_union
1 |
|
上述函数将集合a,b取并集并放到集合c中。但是上下两种写法略有不同。
第一种将并集插入到集合c中,会保留集合中原有的数据。
第二种会直接覆盖集合c中前面的数据。
无论怎么说,推荐只用第一种,哪怕一开始为空容器
inserter()
取交集set_intersection
1 |
|
取集合对称差集set_symmetric_difference
1 |
|