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”。
        • 跳出该代码块。

示例

让我们来看下面的实现来更好地理解:

#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

更新于:2021年10月7日

486 次浏览

开启你的职业生涯

完成课程并获得认证

开始学习
广告