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;
    }
  }