C++ 学习之map容器的排序(重要)

本文详细介绍了如何利用C++ map容器的仿函数实现对Person对象的排序,分别展示了内置int类型和自定义Person类型的排序策略,包括降序和升序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • map容器默认排序规则为 按照key值进行 从小到大排序
  • 利用仿函数,可以改变排序规则
  • map容器的排序是按key键值来排的,主要取决于键值的类型是内置的还是自定义的
#include<iostream>
#include<string>
#include<map>
using namespace std;

/*map容器的排序是按key键值来排的,主要取决于键值的类型*/


class Person
{
public:
	Person(string name,int age)
	{
		this->m_name = name;
		this->m_age = age;
	}

	string m_name;
	int m_age;
};

/************************内置数据类型int的排序(键值的类型是int)*************************/
class myCompare
{
public:
	bool operator()(int v1, int v2)//不要传引用
	{
		return v1 > v2;
	}
};

void test01()//内置数据类型排序
{
	map<int, Person, myCompare> m;//默认是升序,自己用仿函数加排序规则,变为降序
	
	Person p1("张三", 18);
	Person p2("李四", 20);
	Person p3("王五", 19);

	m.insert(make_pair(2, p1));
	m.insert(make_pair(3, p2));
	m.insert(make_pair(1, p3));

	for (map<int, Person, myCompare>::iterator it = m.begin();it != m.end();it++)
	{
		cout << it->first << " " << it->second.m_name << " " << it->second.m_age << endl;
	}


}



/************************自定义数据类型person的排序(键值的类型是person)*************************/
class compare
{
public:
	bool operator()(Person p1,Person p2)
	{
		return p1.m_age > p2.m_age;
	}

};

void test02()
{
	map<Person, int, compare> m;

	Person p1("张三", 18);
	Person p2("李四", 20);
	Person p3("王五", 19);

	m.insert(make_pair(p1, 10));
	m.insert(make_pair(p3, 1));
	m.insert(make_pair(p2, 100));

	for (map<Person, int, compare>::iterator it = m.begin();it != m.end();it++)
	{
		cout << it->first.m_name << " " << it->first.m_age << " " << it->second << endl;
	}
}

int main()
{
	//test01();
	test02();
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值