三、#include < set >
- 头文件set主要包括set这个容器,该容器里面的元素不能重复(去重),内部实现是一棵红黑树(平衡树的一种)。
- 与优先队列一样,set存储的元素必须定义“小于号”运算符。
- size() / empty() / clear() 分别为元素个数、是否没空、清空。
- insert(x): 把一个元素x插入到集合s中。时间复杂度为O(logn),若元素已存在,则不会重复插入该元素。
- find(x): 在集合中查找等于x的元素,并返回该元素的迭代器,若不存在,则返回s.end()。
- erase(it): 设it是一个迭代器,s.erase(it)从s中删除迭代器it指向的元素,时间复杂度O(logn)。
代码:
#include <set>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
set<int> s;
s.insert(1);
s.insert(1);
s.insert(2);
s.insert(3);
for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
printf("%d ", *it);
}
printf("\n");
if (s.find(3) != s.end()) {
printf("s中有该元素");
} else {
printf("s 中没有该元素");
}
printf("\n");
s.erase(s.find(3));
for (set<int>::iterator it = s.begin(); it != s.end(); it++) {
printf("%d ", *it);
}
set<int>::iterator it;
if ((it = s.find(5)) != s.end()) s.erase(it);
return 0;
}