C++:map容器——自定义数据类型进行自定义排序规则

map容器和set容器自带排序操作,但是,对于自定义数据类型,二者必须指定排序规则。本文以map容器为例,针对自定义数据类型作为key值的指定排序进行程序实现。
首先,自定义数据类型:Person类,该类将会作为key值

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

之后,指定排序规则,注意,这里的operator()不能直接作为全局函数,因此需要将其写在类中或者结构体中。

class classCompare
{
public:
    bool operator()(Person p1, Person p2){
        return p1.m_age > p2.m_age;
    }
};

最后,在测试函数中进行排序和排序后的打印操作

void test05()
{
    map<Person, int, classCompare> mp;

    Person p1("c",2);
    Person p2("a",1);
    Person p3("b",3);
    Person p4("d",2);

    mp.insert(pair<Person,int>(p1,10));
    mp.insert(pair<Person,int>(p2,20));
    mp.insert(pair<Person,int>(p3,30));
    mp.insert(pair<Person,int>(p4,40));

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

注意:
1、如果想要让Person对象在其他上下文中也可以使用默认的<比较,你可以在Person结构体内部重载<运算符,这样做的话,就不需要在创建map时指定比较函数了。
2、如果想要在不同的上下文中使用不同的排序规则,使用单独的比较函数对象会更加灵活。

下图是程序运行后的效果
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值