C++ 修改預設排序方式(sort、set、map)
阿新 • • 發佈:2021-01-23
Cpp中修改sort函式排序方式,是通過自擬函式實現的,如下程式碼所示:
bool myCompare(Person &p1, Person &p2)
{
if(p1.m_Age == p2.m_Age)
{
return p1.m_Height > p2.m_Height;
}
return p1.m_Age < p2.m_Age;
}
sort(myCompare);
先對年齡進行升序排序,當年齡相同時,按照身高進行降序排序
那如何根據該思想修改Set容器內的預設排序呢?
Set容器在建立時就已經預設按升序排序了,所以要修改需要在宣告處動手腳,具體就是通過
MyCompare
對()
的過載(仿函式):示例如下,按照降序排序
#include <iostream>
#include <set>
using namespace std;
//仿函式
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
};
void test01()
{
set<int,MyCompare> s1;
s1.insert(10);
s1.insert(40);
s1.insert(20);
s1.insert(60);
for(set<int,MyCompare>::iterator it = s1.begin(); it != s1.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
結果:
上面是對內建資料型別,當然對自定義資料型別更是如此:
#include <iostream>
#include <set>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this->m_Name = name;
this->m_Age = age;
}
int m_Age;
string m_Name;
};
//仿函式
class MyCompare
{
public:
bool operator()(const Person &p1, const Person &p2)
{
return p1.m_Age > p2.m_Age;
}
};
void test01()
{
set<Person,MyCompare> s1;
Person p1("劉備", 24);
Person p2("關羽", 28);
Person p3("張飛", 25);
Person p4("趙雲", 21);
s1.insert(p1);
s1.insert(p2);
s1.insert(p3);
s1.insert(p4);
for(set<Person,MyCompare>::iterator it = s1.begin(); it != s1.end(); it++)
{
cout << (*it).m_Name << ":"<<(*it).m_Age<<endl;
}
}
map與set類似,通過仿函式實現(排序的依據為鍵值)