set
- 所有元素在插入时都会自动排序
- 属于关联式容器,底层为二叉树实现
set和multiset:multiset中允许有重复的元素(头文件都是set)
#include<set>
set<int>s1;
//插入数据只有insert
s1.insert(30);
s1.insert(10);
s1.insert(20);//set:{10,20,30},不允许有重复的值
set<int>s2(s1);
//删除
s1.erase(s1.begin());//删掉了10
s1.erase(30);//删除大小为30的值
s1.erase(s1.begin(),s1.end());
//查找和统计
find(key);//如果key存在,返回该元素的迭代器,否则返回set end()
count(key);//返回key的个数
//pair对组的创建
pair<string,int>p("tmo",20);
cout<<p.first<<" "<<p.second<<endl;
pair<string,int>p2=make_pair("jerr",30);
//排序
//指定排序规则为从大到小
class mycompare{//仿函数
public:
bool operator()(int v1,int v2){
return v1>v2;当//降序排序:v1大于v2时,返回为真
}
set<int,mycompare>s1;
//当set里面的数据是自定义数据类型时
class Person{
public:
string name;
int age;
Person(string name,int age){
this.name=name;
this.age=age;
}
};
void test(){
Person p1("a",2);
Person p1("b",3);
Person p1("c",4);
set<Person>s;
s.insert(p1);
s.insert(p2);
s.insert(p3);
//自定义的数据类型,编译器不知道怎么排序,需要自定义排序规则
}
class comparePerson{
public:
bool operator()(const Person& p1,const Person& p2){
return p1.age>p2.age;
}
}