Luoyoooo

与其感慨路难行,不如马上出发

【数据结构1-3】集合—set

一.集合概览

 

 

二.操作

set自带的函数常用的有10种:

  1. set<int> a 建立一个名字为a、类型为int的集合。a.insert(b) 在集合中插入一个数b,如果这个数已经存在就什么也不干
  2. a.erase(b) 在集合中删除一个数b,如果这个数不存在就什么也不干
  3. a.erase(l) 在集合中删除地址为l的数
  4. a.end() 返回集合中最后一个数的下一个数的地址
  5. a.find(b) 查询b在集合中的地址,如果这个数不存在就返回a.end()
  6. a.lower_bound(b) 返回大于等于b的值(最近的)
  7. a.upper_bound(b)返回大于b的值(最近的)
  8. a.empty() 如果集合是空的就返回1,否则就返回0
  9. a.size() 返回集合中元素个数


例题:【深基17.例5】木材仓库

代码:

 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 }

 

posted @ 2020-03-24 18:11  Luoyoooo  阅读(185)  评论(0编辑  收藏  举报