题目1:
注意点:
1.
Begin(), End()是set的成员函数,返回值分别是set中首个元素的迭代器和set中末尾元素向后一位的迭代器。
2.输出时
使用迭代器时,要写成it!=a.end();
输出的是*it。
3.
begin()返回的迭代器指向set中的最小值;
rbegin()返回的迭代器指向set中的最大值。
但
end()返回的迭代器指向set中的最后元素的后一个位置;
rend()返回指向集合中第一个元素的前一个位置的迭代器
4.
clear()清除set中的所有元素。时间复杂度O(size)。
5.
用erase(x)删除元素。
其中x可以是具体的数或迭代器。删除set中不存在的元素会被忽略。
6.
find(x)返回x元素的迭代器,如果找不到x就返回end()的迭代器。
7.
lower_bound(x)返回set中大于等于x的最小元素的迭代器。
upper_bound(x)返回set中大于x的最小元素的迭代器。如果找不到也会返回end()的迭代器。
8.
AC代码:
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set <int> a;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int opt,x;
cin>>opt>>x;
if(!opt) a.insert(x);
else a.erase(x);
}
set<int>::iterator it;
for( it=a.begin();it!=a.end();it++) cout<<*it<<" ";
cout<<endl;
return 0;
}
题目2:
AC代码:
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set <int> a;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
a.insert(x);
}
cout<<a.size()<<endl;
set<int>::iterator it;
for( it=a.begin();it!=a.end();it++) cout<<*it<<" ";
cout<<endl;
return 0;
}
题目3:
AC代码:
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
const int maxn=111111;
multiset <long long> a;
multiset <long long>::iterator it;
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
long long x;
cin>>x;
a.insert(x);
}
for(it=a.begin();it!=a.end();it++)
{
cout<<*it<<" "<<a.count(*it)<<endl;
int cnt=a.count(*it);
for(int i=1;i<cnt;i++) it++;
}
return 0;
}