C++set容器-内置类型指定排序

Posted 唐火

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++set容器-内置类型指定排序相关的知识,希望对你有一定的参考价值。

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必须指定排序规则才可以插入数据

以上是关于C++set容器-内置类型指定排序的主要内容,如果未能解决你的问题,请参考以下文章

C++set容器-构造和赋值

内置函数

为啥c++的set容器的自定义比较函数要用一个结构体重载()符

PHP 数组排序:内置函数算法排序

PHP 数组排序:内置函数算法排序

内置sorted的简单实现