1. set容器的特点:
所有元素都会根据元素的键值自动被排序。
2. set容器提供的是只读迭代器const_iterator,用户不可以修改set容器的元素
#include <iostream>
#include<set>
#include<algorithm>
using namespace std;
void test01()
{
set<int>s;
s.insert(30);
s.insert(10);
s.insert(20);
s.insert(50);
s.insert(40);
for_each(s.begin(),s.end(),[](int val){
cout<<val<<" ";
});
cout<<endl;
set<int>::const_iterator it=s.begin();
#if 0
*it=100;
#endif
}
3. set的查找,找到返回该元素的迭代器,找不到返回end, s.count(key),统计key的元素个数
void test02()
{
set<int>s;
s.insert(30);
s.insert(10);
s.insert(20);
s.insert(50);
s.insert(40);
set<int>::const_iterator it;
it=s.find(20);
if(it==s.end())
{
cout<<"没有找到"<<endl;
}
else
{
cout<<"找到"<<*it<<endl;
}
cout<<s.count(30)<<endl;
cout<<s.count(100)<<endl;
}
4.对组[两种方法]
void test03()
{
pair<int,string> pair1(9527,"星爷");
cout<<pair1.first<<" "<<pair1.second<<endl;
pair<int,string> pair2=make_pair(10096,"移动");
cout<<pair2.first<<" "<<pair2.second<<endl;
}
5.使用仿函数更改默认排序规则
class MyGreater
{
public:
bool operator ()( int val1,int val2)
{
return val1>val2;
}
};
void test04()
{
set<int,MyGreater>s;
s.insert(30);
s.insert(10);
s.insert(20);
s.insert(50);
s.insert(40);
for_each(s.begin(),s.end(),[](int val){
cout<<val<<" ";
});
cout<<endl;
}
6.set存放自定义数据时需重载’<’运算符
class Person
{
public:
string name;
int age;
Person(string name,int age)
{
this->name=name;
this->age=age;
}
bool operator<(const Person& ob)const
{
return this->age<ob.age;
}
};
void test05()
{
set<Person>s;
s.insert(Person("德玛西亚",19));
s.insert(Person("小法",18));
s.insert(Person("小炮",21));
s.insert(Person("风男",29));
for_each(s.begin(),s.end(),[](Person val){
cout<<val.name<<" "<<val.age<<endl;
});
}
7.set存放自定义数据时指定排序规则【仿函数】
class MyGreaterPerson
{
public:
bool operator()(const Person &ob1,const Person &ob2)
{
return ob1.age>ob2.age;
}
};
void test06()
{
set<Person,MyGreaterPerson>s;
s.insert(Person("德玛西亚",19));
s.insert(Person("小法",18));
s.insert(Person("小炮",21));
s.insert(Person("风男",29));
for_each(s.begin(),s.end(),[](Person val){
cout<<val.name<<" "<<val.age<<endl;
});
}
8.multiset可以插入相同元素的值
void test07()
{
multiset<int>s;
s.insert(10);
s.insert(10);
for_each(s.begin(),s.end(),[](int val){
cout<<val<<endl;
});
}