设置像数字排序
我试着对一组字符串进行排序,就好像它们是数字一样。 每个字符串的长度可以达到50,而且它们实际上并不仅仅由数字组成。 正如我在论坛中所了解和搜索的,C++默认按字典顺序对字符串进行排序。 有没有办法改变这种默认行为以符合我的需求?设置<string>像数字排序
我需要的是象下面这样:
set<string> solution;
solution.insert("12X451");
solution.insert("X23454");
solution.insert("12345");
solution.insert("12315");
solution.insert("123111");
solution.insert("5231");
for (auto s : solution)
{
cout << s << endl;
}
此打印:
123111
12315
12345
12X451
5231
X23454
我需要的是:
5231
12315
12345
123111
12X451
X23454
你应该通过比较功能集的构造函数参数达到这个效果。
bool compare(string s1, string s2)
{
if(s1.size() == s2.size()) return s1 < s2;
return s1.size() < s2.size();
}
根据您的小规则更改上述功能。
或者你也可以通过比较功能类作为模板参数。
struct cmp {
bool operator()(const string &s1, const string &s2)
{
if(s1.size() < s2.size()) return true;
if(s1.size() > s2.size()) return false;
return s1 < s2;
}
};
...
set<string, cmp> solution;
你能否提供一个小例子? – 2014-12-05 12:51:06
函数类通常比这里的函数更好。它可以更容易地指定模板参数('Compare' vs'bool(*)(const string&,const string&)'),并给出更好的内联范围。 – 2014-12-05 12:57:40
@MikeSeymour谢谢。我只是想给OP一个快速的开始指针。现在他可以按照自己的意愿使用功能类或其他选择。我会在我的答案中添加函数类的用法。 – 2014-12-05 13:00:50
什么是你的信预期的行为?字母总是大于任何数字? – CoryKramer 2014-12-05 12:48:32
是的,它就像他们的ASCII码一样。 – 2014-12-05 12:49:41