C++ 设置<;字符串>;像数字一样排序
我试图对字符串集进行排序,就好像它们是数字一样。 每个字符串的长度可以达到50,而且它们实际上不仅仅由数字组成。 正如我在论坛中了解到的,C++默认地按字典排序字符串。 是否有办法更改此默认行为以符合我的需要 我需要的是如下所示:C++ 设置<;字符串>;像数字一样排序,c++,c++11,C++,C++11,我试图对字符串集进行排序,就好像它们是数字一样。 每个字符串的长度可以达到50,而且它们实际上不仅仅由数字组成。 正如我在论坛中了解到的,C++默认地按字典排序字符串。 是否有办法更改此默认行为以符合我的需要 我需要的是如下所示: set<string> solution; solution.insert("12X451"); solution.insert("X23454"); solution.insert("12345"); solut
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;
}
我需要的是:
5231
12315
12345
123111
12X451
X23454
您应该将Compare函数作为set的构造函数参数传递,以实现此效果
bool compare(string s1, string s2)
{
if(s1.size() == s2.size()) return s1 < s2;
return s1.size() < s2.size();
}
bool比较(字符串s1、字符串s2)
{
如果(s1.size()==s2.size())返回s1
根据您的小游戏规则更改以上功能
或者您可以将比较函数类作为模板参数传递
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;
struct-cmp{
布尔运算符()(常量字符串和s1、常量字符串和s2)
{
如果(s1.size()s2.size())返回false;
返回s1
你对信件的预期行为是什么?字母总是比任何数字都大吗?是的,这就像他们的ASCII码。你能提供一个小例子吗?函数类通常比函数更好。它使指定模板参数(
Compare
vsbool(*)(const-string&,const-string&)
)更加容易,并为内联提供了更好的范围。@MikeSeymour谢谢。我只是想给OP一个快速的开始指针。现在他可以使用一个函数类或其他他想要的替代品。我想在我的答案中添加函数类用法。我想s1.size()!=s2.size()节应为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;