std::set是关联容器,含有 Key类型对象的已排序集。用比较函数 Compare进行排序。搜索、移除和插入拥有对数复杂度。 set 通常以红黑树实现。
在每个标准库使用比骄(Compare) 概念的场所,用等价关系确定唯一性。不精确地说,若二个对象a与b相互间既不比较大于亦不比较小于:!comp(a,b)&&!comp(b,a),则认为它们等价。
std::set满足容器(Container)、具分配器容器(AllocatorAwareContainer)、关联容器(AssociativeContainer) 和可逆容器(ReversibleContainer)的要求。
迭代器
begin,cbegin:返回指向容器第一个元素的迭代器
end,cend:返回指向容器尾端的迭代器
rbegin,crbegin:返回指向容器最后元素的逆向迭代器
rend,crend:返回指向前端的逆向迭代器
容量
empty:检查容器是否为空
size:返回容纳的元素数
max_size:返回可容纳的最大元素数
修改器
clear:清除内容
insert:插入元素或结点
emplace:原位构造元素
emplace_hint:使用hint就地构造元素
erase:擦除元素
swap:交换内容
extract:从另一容器释出结点
merge:从另一容器接合结点
查找
count:返回匹配特定键的元素数量
find:寻找带有特定键的元素
contains:检查容器是否含有带特定关键的元素
equal_range:返回匹配特定键的元素范围
lower_bound:返回指向首个不小于给定键的元素的迭代器
upper_bound:返回指向首个大于给定键的元素的迭代器
观察器
key_comp:返回用于比较键的函数
value_comp:返回用于在value_type类型的对象中比较键的函数。
//
// Created by LiuHongzhe on 2021/11/11.
//
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
set<ll>a;
cout<<a.empty()<<endl;//检查容器是否为空
cout<<a.size()<<endl;//返回容纳的元素数
cout<<a.max_size()<<endl;//返回可容纳的最大元素数
a.insert(123);//插入元素或结点
a.insert(456);
a.insert(789);
for(auto it=a.begin();it!=a.end();it++)
{
cout<<*it<<" ";//返回指向容器第一个元素的迭代器,返回指向容器尾端的迭代器
}
cout<<endl;
a.erase(a.begin());//擦除元素
for(auto it=a.begin();it!=a.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
a.insert(456);
cout<<a.count(456)<<endl;//返回匹配特定键的元素数量
cout<<a.count(123)<<endl;
cout<<"======================="<<endl;
auto it=a.find(123);//寻找带有特定键的元素
if(it!=a.end())
{
cout<<"find:"<<*it<<endl;
}
else
{
cout<<"no find"<<endl;
}
it=a.find(456);
if(it!=a.end())
{
cout<<"find:"<<*it<<endl;
}
else
{
cout<<"no find"<<endl;
}
a.clear();//清除内容
cout<<a.size()<<endl;
return 0;
}