【发布时间】:2014-07-10 09:55:26
【问题描述】:
我需要先按字母顺序对给定数字进行排序,然后再按数字升序排序。 例如我有这些数字
{"10", "1", "2", "20", "200", "3", "300", "30", "201", "21"}
我要这个订单
{"1", "10", "2", "20", "21", "200", "201", "3", "30", "300"}
我写了下面的比较函数对它们进行排序。
bool AlphaNumericCompare(const string & str1, const string& str2 )
{
int ind1 = 0, ind2 = 0;
while ( ind1 < str1.size() && ind2 < str2.size() )
{
if( str1[ind1] < str2[ind2] )
return true;
else if( str1[ind1] > str2[ind2] )
return false;
ind1++;
ind2++;
}
if( ind1 == str1.size() && ind2 == str2.size() )
{
return true;
}
else if( ind1 == str1.size() )
{
return true;
}
return false;
}
但是这个函数给了我以下命令
{"1", "10", "2", "20", "200", "201", "21", "3", "30", "300"}
其中 200 和 201 放在 21 之前。 谁能建议如何更改上述比较函数以获得所需的排序顺序?
【问题讨论】:
-
使用自定义比较器对
std::sort进行两次调用就足够了:第一个按字母顺序排序,第二个按数字排序。 -
如果我们先按字母顺序排序,第二个数字不会按原始顺序排序吗?例如 200、30 在按字母排序后按该顺序放置。数字排序后这个顺序会不会颠倒?
-
我不明白所需的输出是如何“先按字母顺序,然后按数字升序”排序的。
-
任务不清楚。您是否希望以相同数字开头的所有数字都放在一起,并且在这些组中对值进行排序?
-
在上面的例子中,按照字母顺序,200 应该在 30 之前,但是按照数字顺序,21 应该在 200 之前,即使它按照字母顺序是相反的
标签: c++ sorting comparison