C++pair队组及set容器排序(笔记自用
pair对组创建
成对出现的数据,利用对组可以返回两个数据
两种创建方式:
pair<type,type>p(value1,value2);
pair<type,type>p=make_pair(value1,value2);
示例:
void test01()
{
pair<string,int>p("tom",18);
cout<<p.first<<p.second<<endl;
pair<string,int>p("moumou",20);
cout<<p.first<<p.second<<endl;
}
set容器排序
主要技术点:利用仿函数,可以改变排序规则
//仿函数//重点
class mycompare
{
public:
bool operator()(int v1,int v2)
{
return v1>v2;
}
};
void test01()
{
//set存放内置数据
set<int>s1;//默认自动升序排序
s1.insert(10);
s1.insert(50);
s1.insert(30);
s1.insert(20);
s1.insert(40);
for(set<int>::interator it=s1.begin();it!=s1.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
//指定排序规则降序
//应在自动排序前设置好
//要在参数列表里面放数据类型,所以只能用仿函数
set<int ,mycompare>s2;
s2.insert(10);
s2.insert(50);
s2.insert(30);
s2.insert(20);
s2.insert(40);
for(set<int>::interator it=s2.begin();it!=s2.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
示例二:set存放自定义数据类型
class person
{
public:
person(string name,int age)
{
this->m_name=name;
this->m_age=age;
}
string m_name;
int m_age;
};
class mycompare
{
public:
//不加引用则为值传递,会狗仔出一个副本发生拷贝构造
//拷贝构造既降低效率,又容易发生浅拷贝错误
//若vs2019的在仿函数报错,可以在函数后面加const
bool operator()(const person &p1,const person&p2)//const
{
//按照年龄降序
return p1.m_age>p2.m_age;
}
};
void test01()
{
//自定义数据类型,都要指定排序规则,否则报错
set<person,myconpare>s;
person p1("moumou",16);
person p2("dudu",20);
person p3("mumu",18);
person p4("kuku",19);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
for(set<person>::interator it=s.begin();it!=s.end();it++)
{
cout<<it->m_name<<it->m_age<<endl;
}
}
内容学自:http://yun.itheima.com/course/520.html?bili