set集合容器实现了红黑树的平衡二叉树的数据结构
#include<set>
#include<iostream>
#include<cstdio>
using namespace std;
///自定义比较函数myComp,重载“()”操作符
struct myComp{
bool operator()(const int &a,const int &b){
if(a != b)
return a > b;
else
return a > b;
}
};
///如果元素是结构体,可以把比较函数写在结构体内
struct Info{
string name;
float score;
///重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const{
///按score从大到小排列,使用“>”号即可
return a.score < score;
}
};
int main(){
///定义元素类型为int的对象s,当前没有任何元素
///元素的排列采用默认的比较规则,也可以自定义比较规则函数
set<int> s;
///元素的插入与中序遍历
///插入了五个元素,第二个8重复,没有插入进去
s.insert(8);
s.insert(1);
s.insert(12);
s.insert(6);
s.insert(8);
///中序遍历集合中的元素
set<int>::iterator it;
for(it = s.begin();it != s.end();it++){
cout << *it << " ";
}
printf("\n");
///元素的反向遍历
set<int>::reverse_iterator rit;
for(rit = s.rbegin();rit != s.rend();rit++){
cout << *rit << " ";
}
printf("\n");
///元素的删除
s.erase(6);
for(auto it = s.begin();it != s.end();it++){
cout << *it << " ";
}
printf("\n");
///元素的检索
s.insert(6);
///查找键值为6的元素
it = s.find(6);
if(it != s.end())
cout << "找到该元素" << endl;
else
cout << "该元素不存在" << endl;
///查找键值为20的元素
it = s.find(20);
if(it != s.end())
cout << "找到该元素" << endl;
else
cout << "该元素不存在" << endl;
///自定义比较函数
set<int,myComp> ss;
ss.insert(8);
ss.insert(1);
ss.insert(12);
ss.insert(6);
///迭代器
for(auto it = ss.begin();it != ss.end();it++)
cout << *it << " ";
printf("\n");
set<Info> sss;
Info info;
info.name = "Jack";
info.score = 80.5;
sss.insert(info);
info.name = "Tom";
info.score = 20.5;
sss.insert(info);
info.name = "Nacy";
info.score = 60.5;
sss.insert(info);
for(auto it = sss.begin();it != sss.end();it++)
cout << (*it).name << ":" << (*it).score << endl;
printf("\n");
return 0;
}