1. 程式人生 > 其它 >C++set容器-內建型別指定排序

C++set容器-內建型別指定排序

技術標籤:C++基礎學習c++資料結構

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必須指定排序規則才可以插入資料