set集合容器
【set的定义】
set容器的头文件:#include<set>
定义:set<键值>s;
【set的优缺】
1.set容器的检索使用中序遍历算法,检索效率高于vector、deque、list等容器。
2.set容器会对插入的元素按照键值由小到大的顺序排序。
3.set集合的主要目的就是为了快速检索。
4.set的缺点是不能直接修改容器中的键值。
【set的函数】
set<int>s;
1. s.insert(x); 插入一个键值x的数据,容器会对其自动排序
2. s.erase(x); 删除键值x的数据
3. s.clear(); 清空容器s
4.find(x); 查找键值为x的数据,返回该键值在迭代器的位置,查找不到返回集合最后一个元素 的位置,即end()
此处扩展一个反向迭代器
反向迭代器的定义 : set<int>::reverse_inerator rit;
rbegin()表示反向遍历的开始位置,rend()表示结束位置
【set的基本操作】
1.set的插入,删除,遍历。
#include<set>
#include<iostream>
using namespace std;
int main()
{
set<int>s;
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
// 第二次插入8,重复元素,不会插入
s.insert(8);
set<int>::iterator it; // 前向迭代器
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
set<int>::reverse_iterator rit; // 反向迭代器
for(rit=s.rbegin();rit!=s.rend();rit++)
cout<<*rit<<" ";
cout<<endl;
s.insert(15);
s.erase(6); // 删除set中值为6的元素
for(it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
s.clear();
return 0;
}
2.set的查找
#include<set>
#include<iostream>
using namespace std;
int main()
{
set<int>s;
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
s.insert(8);
s.insert(9);
s.insert(10);
set<int>::iterator it;
it=s.find(6); // 查找键值为6的元素,如果找到,返回键值在迭代器的位置,找不到返回最后一个元素的位置,即end()
if(it!=s.end())
cout<<*it<<endl;
else
cout<<"not find it"<<endl;
it=s.find(20);
if(it!=s.end())
cout<<*it<<endl;
else // 找不到
cout<<"not find it"<<endl;
return 0;
}
【扩展】
multiset多集合容器
multiset与set唯一的不同是,multiset允许重复的元素键值插入,而set则不允许
multiset容器删除时,会删除键值等于某个值得所有元素。
multiset容器查找时,会返回第一次找到的迭代器的位置。