set 是关联容器,含有键值类型对象的已排序集,搜索、移除和插入拥有对数复杂度。set 内部通常采用 红黑树 实现。平衡二叉树 的特性使得 set 非常适合处理需要同时兼顾查找、插入与删除的情况。
和数学中的集合相似,set 中不会出现值相同的元素。如果需要有相同元素的集合,需要使用 multiset。multiset 的使用方法与 set 的使用方法基本相同。
插入与删除操作
insert(x) 当容器中没有等价元素的时候,将元素 x 插入到 set 中。
erase(x) 删除值为 x 的 所有 元素,返回删除元素的个数。
erase(pos) 删除迭代器为 pos 的元素,要求迭代器必须合法。
erase(first,last) 删除迭代器在  范围内的所有元素。
clear() 清空 set。
查找操作
count(x) 返回 set 内键为 x 的元素数量。
find(x) 在 set 内存在键为 x 的元素时会返回该元素的迭代器,否则返回 end()。
lower_bound(x) 返回指向首个不小于给定键的元素的迭代器。如果不存在这样的元素,返回 end()。
upper_bound(x) 返回指向首个大于给定键的元素的迭代器。如果不存在这样的元素,返回 end()。
empty() 返回容器是否为空。
size() 返回容器内元素个数。
#include<iostream>//set容器
#include<set> //set头文件
using namespace std;
void solve()
{
int n;
cin >> n;
set<int> q;
while (n--)
{
int m;
cin >> m;
bool op = 1;
for (int i = 0, a; i < m; i++)
{
cin >> a;
if (op)
{
cout << a;
q.insert(a); //将元素a插入set容器
op = 0;
}
else
{
if (q.find(a) == q.end()) //q.find()查找元素 q.end()尾端元素
{
cout << " " << a;
}
q.insert(a);
}
}
cout << "\n";
}
}
int main()
{
solve();
return 0;
}
#include<iostream>
#include<vector>
#include<set>
using namespace std;
int main()
{
vector<int> myVector = { 1,2,3,4,58 };
cout << myVector[0] << endl;
myVector.push_back(6);
cout << myVector[5] << endl;
}
void solve()
{
int n, k;
cin >> n >> k;
set<int> q;
for (int i = 0,a; i < n; i++)
{
cin >> a; q.insert(a);
}
int res = 0;
for (auto x : q) //auto迭代器
{
res++;
if (res == k)
{
cout << x << endl;
return;
}
}
cout << "no answer\n";
}
int main()
{
solve();
return 0;
}