#P0165. set & 有序集合

set & 有序集合

题目描述

set<int>sset<int> s

常用函数

s.insert(value)value 添加到集合。

s.erase(value)value 从集合中删除。

s.count(x) 判断 x 是否在集合中,如果存在返回 11,否则返回 00

s.clear() 清空集合。

注意: 包含 #include <set>

注意: 插入到集合中的元素会自动升序。

注意: set 基于红黑树实现,遍历比较特殊,不支持 [ ] 访问。可以用迭代器访问。

for(set<int>::iterator it = s.begin(); it != s.end(); ++ it) cout << *it << ' ';

#include <iostream>
#include <set>
using namespace std;
int main()
{
    int n;
    set<int> s;
    cin >> n;
    for(int i = 1; i <= n; ++ i)
    {
    	int op, t;
    	cin >> op;
    	if(op == 1)
    	{
    		cin >> t;
    		s.insert(t);
		}
		else if(op == 2)
		{
            cin >> t;
			s.erase(t);
		}
		else
		{
			cin >> t;
			if(s.count(t)) cout << "Yes" << endl;
			else cout << "No" << endl;
		}
	}
    return 0;
}

输入格式

11 行,为一个正整数 nn

接下来 nn 行,每行一个正整数 opop

opop11 则接着输入一个整数 tt, 并将其 s.insert(t)s.insert(t)tt 添加到集合。

opop22 则接着输入一个整数 tt, 并将其 s.erase(t)s.erase(t)tt 从集合删除。

opop33,则接着输入一个整数 tt, 若集合中存在 tt,则输出 Yes,否则输出 No

数据保证 opop22 时集合不为空。

输出格式

共一行,对于每个 33 操作,输出相应的答案。

数据范围

1n104.1 ≤ n ≤ 10^4.

1t103.1 ≤ t ≤ 10^3.

输入样例:

5
1 1
1 2
1 3
2 2
3 2

输出样例:

No