1概念
-
set
- 键值自动排序、
- 键值唯一
- set的迭代器不能改变set1的值 所以其迭代器就是只读迭代器
- set和list一样 当对元素进行插入删除的操作之后 操作之前的所有迭代器都有效 被删除的元素除外
-
multiset
- 可以有相同的key值
-
两种的底层实现都是红黑树
2常用函数
2.1构造函数
2.2赋值函数
2.3大小
2.4 插入和删除
2.5 查找
2.6代码示意
#include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#include<set>
using namespace std;
void Printf(set<int>& s){
for(set<int>::iterator it=s.begin();it!=s.end();it++){
cout<<*it<<" ";
}
cout<<endl;
}
void test(){
set<int> s;
//插入元素只有
s.insert(10);
s.insert(40);
s.insert(30);
s.insert(50);
s.insert(20);
s.insert(60);
s.erase(s.begin());
s.erase(50);
Printf(s);
}
void test02(){
set<int> s;
//插入元素只有
s.insert(10);
s.insert(40);
s.insert(30);
s.insert(50);
s.insert(20);
s.insert(60);
//存在返回对应的迭代器 不存在 返回s.end()
set<int>::iterator pos=s.find(30);
if(pos!=s.end()){
cout<<"找到l"<<endl;
P }
//统计 对于set而言 结果0或1;
int num=s.count(10);
}
//对组的声明
void test03(){
pair<string, int> p(string("Tom"),18);
pair<string, int> p1=make_pair(string("Tom"),18);
cout<<p1.first<<p1.second<<endl;
}
void test04(){
set<int> s;
pair<set<int>::iterator,bool> ret=s.insert(10);
if(ret.second){
cout<<"第一个插入成功"<<endl;
}else{
cout<<"第一个插入不成功"<<endl;
}
s.insert(10);
if(ret.second){
cout<<"第2个插入成功"<<endl;
}else{
cout<<"第2个插入不成功"<<endl;
}
multiset<int> ms;
ms.insert(10);
ms.insert(10);
}
3自定义类型插入set
3.1指定插入排序的规则
//利用仿函数来指定排序规则
class Mycompare{
public:
bool operator()(int v1,int v2){
return v1>v2;
}
};
int test05(){
//默认从小到大
//因为模版里面只能放类型 不能放指针 所以不能放回调函数 所以只能采用仿函数的方法
set<int,Mycompare> s;
//插入元素只有
s.insert(10);
s.insert(40);
s.insert(30);
s.insert(50);
s.insert(20);
s.insert(60);
for(set<int,Mycompare>::iterator it=s.begin();it!=s.end();it++){
cout<<*it<<endl;
}
}
3.2自定义类型插入set
class Person{
public:
Person(string str,int a){
name=str;
age=a;
}
string name;
int age;
};
class My_Person_compare{
public:
//仿函数必须是const
bool operator()(const Person& v1, const Person& v2){
return v1.age >v2.age;
}
};
void test06(){
set<Person,My_Person_compare> s;
//对于自定的类型 插入时一定要利用仿函数指定排序规则
Person s1("aaaa",10);
Person s2("bbbb",50);
Person s3("cccc",30);
Person s4("dddd",40);
Person s5("eeee",20);
s.insert(s1);
s.insert(s2);
s.insert(s3);
s.insert(s4);
s.insert(s5);
for(set<Person,My_Person_compare>::iterator it=s.begin();it!=s.end();it++){
cout<<(*it).name<<" "<<(*it).age<<endl;
}
}