写在前面

无意间翻到了17年11月准备NOIP时整理的set用法,现把它放到csdn上来


<set> 小结

set的英文意思是“集合”, 集合都不陌生吧,集合的特点有唯一性,即:每一个元素只有一个,所以set可以用来“去重”操作,set还有默认的排序。

  1. 头文件——<set>
  2. 定义——set<int>Q
  3. 输入(插入)——insert(x)
  4. 有序输出:
1
2
3
4
5
set<int>::iterator it;

for(it = Q.begin(); it != Q.end(); it++)

cout<<*it<<endl;
  1. 删除制定元素——erase(x)
  2. 清空——clear()
  3. 判空——empty()
  4. 大小——size()
  5. 二分查找——Q.lower_bound(x)

set 的 lower_bound() upper_bound

内部自带 lower_bound() upper_bound(这俩返回的是迭代器)

lower_bound(key_value) ,返回第一个大于等于key_value的定位器

upper_bound(key_value),返回最后一个大于等于key_value的定位器

erase的三种用法

erase(iterator) ,删除定位器iterator指向的值

erase(first,second),删除定位器firstsecond之间的值

erase(key_value),删除键值key_value的值

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
int n = get_num();
for (int i = 1; i <= n; i++) {
Q.insert(get_num());
}
set<int>::iterator p_s;
for (p_s = Q.begin(); p_s != Q.end(); p_s++) {
cout << *p_s << " ";
}
cout << endl;
p_s = Q.lower_bound(1);
Q.erase(p_s);
for (p_s = Q.begin(); p_s != Q.end(); p_s++) {
cout << *p_s << " ";
}
return 0;
}