【数据结构1-3】集合—set
一.集合概览
二.操作
set自带的函数常用的有10种:
- set<int> a 建立一个名字为a、类型为int的集合。a.insert(b) 在集合中插入一个数b,如果这个数已经存在就什么也不干
- a.erase(b) 在集合中删除一个数b,如果这个数不存在就什么也不干
- a.erase(l) 在集合中删除地址为l的数
- a.end() 返回集合中最后一个数的下一个数的地址
- a.find(b) 查询b在集合中的地址,如果这个数不存在就返回a.end()
- a.lower_bound(b) 返回大于等于b的值(最近的)
- a.upper_bound(b)返回大于b的值(最近的)
- a.empty() 如果集合是空的就返回1,否则就返回0
- a.size() 返回集合中元素个数
代码:
1 #include<iostream>
2 #include<set>
3 using namespace std;
4 int main()
5 {
6 set<int> s;
7 int n;
8 cin >> n;
9 for (int i = 0; i < n; i++)
10 {
11 int tmp1, tmp2;
12 cin >> tmp1 >> tmp2;
13 if (tmp1 == 1)
14 {
15 if (s.find(tmp2) != s.end())
16 cout << "Already Exist" << endl;
17 else
18 s.insert(tmp2);
19 }
20 if (tmp1 == 2)
21 {
22 if (s.empty())
23 cout << "Empty" << endl;
24 else
25 {
26 auto it1 = s.lower_bound(tmp2);
27 auto it2 = it1;
28 if (it2 != s.begin())
29 it2--;
30 if (it1!=s.end()&&(tmp2 - *it2) > (*it1 - tmp2))
31 it2 = it1;
32 cout << *it2 << endl;
33 s.erase(it2);
34 }
35 }
36 }
37 return 0;
38 }