用仿函数实现以std::string作为key的map自定义排序

 起因:前缀相同、后半部分为递增数字的std::string作为Map的key时希望按数字部分的大小排序,如预期排序为item0, item1,...item9, item10的一些字符串作为map的key, 在map中默认排序是item0,item1,item10,item2,...item9.

 目标:用仿函数实现以std::string作为key的map自定义排序

 实现:

class SortId //注意:仿函数重载的是()而不是<
{
public:
	bool operator () (const std::string & id1, const std::string & id2) const
	{
		int i=0;
		int m1=0,m2=0;
		while(i<id1.size())
		{
			if(id1[i]>='0' && id1[i]<='9')
			{
				m1=i;
				break;
			}
			i++;
		};
		i=0;
		while(i<id2.size())
		{
			if(id2[i]>='0' && id2[i]<='9')
			{
				m2=i;
				break;
			}
			i++;
		};
		int a = atoi(id1.substr(m1).c_str());
		int b = atoi(id2.substr(m2).c_str());
		if(a==b)
			return id1<id2;
		return a<b;
	}
};
typedef std::map<std::string, osg::Node* , SortId > ChildMap;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值