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