C++程序:集合STL的插入、删除和查找
假设我们有一个用于整数类型数据的集合数据结构。在标准输入中,我们提供n个查询。每个查询(每一行)包含两个元素。第一个是操作符,第二个是元素。操作如下:
插入:将元素插入到集合中。
删除:从集合中删除元素(如果存在)。
查找:在集合中搜索元素,如果存在则显示“Yes”,否则显示“No”。
因此,如果输入为n = 7,查询 = [[1,5],[1,8],[1,3],[2,8],[1,9],[3,8],[3,3]],则输出将为[“No”, “Yes”],因为8不在集合中,而3在集合中。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个集合s。
- 定义一个集合迭代器'it'来遍历s。
- q := 查询数量。
- 当q不为零时,每次迭代后减少q,执行:
- 获取查询类型qt。
- 根据qt:
- 如果qt为1,则将x插入s。
- 跳出该代码块。
- 如果qt为2,则从s中删除x。
- 跳出该代码块。
- 如果qt为3,
- 在it内调用find(x)。
- 如果it与s的最后一个元素相同,则
- 打印“NO”。
- 否则
- 打印“YES”。
- 跳出该代码块。
- 如果qt为1,则将x插入s。
示例
让我们来看下面的实现来更好地理解:
#include <iostream> #include <set> using namespace std; int main(){ set<int> s; set<int>::iterator it; int q,x; int qt; cin >> q; while(q--){ cin>>qt>>x; switch(qt){ case 1:s.insert(x); break; case 2:s.erase(x); break; case 3:it=s.find(x); if(it==s.end()) cout<<"No"<<endl; else cout<<"Yes"<<endl; break; } } return 0; }
输入
7 1 5 1 8 1 3 2 8 1 9 3 8 3 3
输出
No Yes
广告