C++set容器-內建型別指定排序
阿新 • • 發佈:2021-02-19
set容器排序
利用訪函式,可以改變排序規則
一、set存放內建資料型別
程式碼如下:
#include <iostream>
using namespace std;
#include <set>
class Mycompare {
public:
bool operator()(int v1, int v2) {
return v1 > v2;
}
};
//set容器排序
void test01() {
set<int >s1;
s1.insert(10);
s1.insert(20 );
s1.insert(30);
s1.insert(50);
s1.insert(40);
for (set<int >::iterator it = s1.begin(); it != s1.end(); it++) {
cout << *it << " ";
}
cout << endl;
//指定排序規則
set<int, Mycompare >s2;
s2.insert(10);
s2.insert(20);
s2.insert(30);
s2.insert(50);
s2.insert( 40);
for (set<int, Mycompare>::iterator it = s2.begin(); it != s2.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
test01();
return 0;
}
結果:
二、set存放自定義資料型別
程式碼如下:
#include <iostream>
using namespace std;
#include <set>
#include <cstring>
//set容器排序,存放自定義型別
class Person {
public:
Person(string name, int age) {
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
class comparePerson {
public:
bool operator()(const Person &p1, const Person &p2) {
//按照年齡 降序
return p1.m_Age > p2.m_Age;
}
};
void test01() {
//自定義資料型別 都會指定排序規則
set<Person, comparePerson>s;
Person p1("劉備", 28);
Person p2("關羽", 26);
Person p3("張飛", 24);
Person p4("馬超", 22);
Person p5("趙雲", 21);
s.insert(p1);
s.insert(p2);
s.insert(p3);
s.insert(p4);
s.insert(p5);
for (set<Person, comparePerson>::iterator it = s.begin(); it != s.end(); it++) {
cout << "姓名:" << it->m_Name << " " << "年齡:" << it->m_Age << endl;
}
}
int main() {
test01();
return 0;
}
總結:
對於自定義資料型別,set必須指定排序規則才可以插入資料