#include <iostream>
#include <cstdio>
#include <set>
// 仿函数的原型
//struct greaters
//{
// bool operator()(const int &left,const int &right) const
// {
// return left>right;
// }
//};
using namespace std;
int main()
{
// set容器,元素具有唯一性,但与寻常集合 不同,它是有序的
// 元素必修顺序插入,不能在指定位置插入
// 内部结构为红黑二叉树,加入数据的效率居然比vector还快?反正我信了
// list与vec的比较
//对于忘list中插入数据,很好理解,分配一个新的结点空间,添加到链表尾部即可
//对于往vectorz中添加数据,需要判断当前控件是否够用,不够用的话需要再次分配稍大的一些空间
// 然后把已有的元素拷贝到新的空间区域,然后释放已有的空间。
// 也许有人觉得这个拷贝操作很费时,觉得没有list添加的速度快,然而,事实并不是这样…..
// 好了,再回归set
// insert,插入函数,重复失败,返回pair类型
// 复杂的数据类型,需要用仿函数确定元素的顺序
set<int> set1;
set1.insert(10);
set1.insert(20);
set1.insert(5);
for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
{
cout<<*it<<‘ ‘;
}
cout<<endl;
set1.erase(set1.begin());
for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
{
cout<<*it<<‘ ‘;
}
cout<<endl;
// 默认是从小到大的顺序
// set<int,less<int>> set1;
// 从大到小的顺序是
// set<int,greaters<int>> set2;
pair<set<int>::iterator,bool> pair1=set1.insert(50);
cout<< *pair1.first <<endl;
if(pair1.second==true)
{
cout<<"YES"<<endl;
}
pair1=set1.insert(20);
cout<<pair1.second<<endl;
// set的数据查找
// lower_bound
// upper_bound
// equal_bound
// 查找小于等于10的元素的位置
cout<<*set1.lower_bound(10)<<endl;
// 查找大于20的元素的位置
// 注意,这里没有等于哈
cout<<*set1.upper_bound(20)<<endl;
for(set<int>::iterator it=set1.begin();it!=set1.end();++it)
{
cout<<*it<<‘ ‘;
}
cout<<endl;
// 查找大于等于20的元素的位置
cout<<* set1.equal_range(20).first<<endl;
cout<<* set1.equal_range(20).second<<endl;
// multiset ,元素可以重复,其余基本操作相似
return 0;
}