c++ 自定义map的排序方法

对于map<string,string> proMap;这样的变量,默认是采用string的<操作法,某些情况下,比如11会排在2的前面,此时需要自定义比较函数

如下例所示:

struct StrCompare {
	bool operator()(const std::string &lhs, const std::string &rhs) const
	{
		return lhs.length()<rhs.length() || (lhs.length()==rhs.length() && lhs<rhs);
	}
};




std::map<std::string, std::string, StrCompare> m_pramMap;

 

即可实现“11” 排序在“2”后面。

 

参考:

https://www.jianshu.com/p/5b24ac2a6cac

 

### C++ Map 自定义排序实现 在C++标准库中,`std::map`默认按照键的升序排列。如果希望改变这种行为或基于其他条件进行排序,则需要提供自定义比较器。 对于`std::map`来说,在创建实例时可以通过第三个模板参数指定比较函数对象[^1]: ```cpp #include <iostream> #include <map> #include <string> struct CustomCompare { bool operator()(const int& lhs, const int& rhs) const { // 实现降序逻辑 return lhs > rhs; } }; int main() { std::map<int, std::string, CustomCompare> myMap; myMap[1] = "one"; myMap[2] = "two"; myMap[3] = "three"; for (auto&& pair : myMap) { std::cout << pair.first << ": " << pair.second << '\n'; } return 0; } ``` 上述代码展示了如何通过定义结构体`CustomCompare`并重载其调用操作符(`operator()`)来构建一个用于整数类型的降序比较器。当以此方式初始化`std::map`时,所有的插入和查找都将遵循这个新的顺序规则。 需要注意的是,一旦选择了特定的比较策略,就不能再更改该容器内的元素之间的相对位置;也就是说,不能动态切换已存在的`std::map`实例所使用的比较方法。如果确实有此需求,可以考虑先将数据转移到另一个具有不同比较机制的新容器中去处理。 另外,对于像Unreal Engine中的`TMap`这样的第三方容器类,虽然它们可能提供了额外的功能特性,但在涉及到基本的数据访问模式上仍然保持一致——即允许用户传入定制化的谓词来进行排序或其他形式的操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值