【问题标题】:Sorting names with numbers correctly用数字正确排序名称
【发布时间】:2009-09-21 09:59:11
【问题描述】:

对于排序项目名称,我想正确支持数字。即这个:

1 Hamlet
2 Ophelia
...
10 Laertes

而不是

1 Hamlet
10 Laertes
2 Ophelia
...

有人知道已经支持该功能的比较函子吗?
(即可以传递给std::sort的谓词)

我基本上支持两种模式:前导数字(如上)和末尾数字,类似于资源管理器:

Dolly
Dolly (2)
Dolly (3)

(我想我可以解决这个问题:按字符进行比较,并以不同的方式处理数值。但是,这可能会破坏 unicode collaiton 之类的)

【问题讨论】:

  • std::sort 对 Unicode 一无所知,因此您不会破坏它。这是谓词需要正确处理它。您可能不应该按字符分解它,而是将字符串标记化,然后对标记进行排序。
  • 我没有计划破坏 std::sort :) 比较/整理段的好主意。

标签: c++ sorting predicate string-comparison


【解决方案1】:

这称为字母数字排序。
看看这个链接:The Alphanum Algorithm

【讨论】:

  • 谢谢!它不整理段(而是逐个字符比较),也不能正确处理超过 unsigned long 的数字,但它是一个很好的替代品。
【解决方案2】:

我认为你可以使用一个 pair 对象然后制作向量 > 然后对这个向量进行排序。 对基于它们的第一个元素进行比较。所以,这样你就可以得到你想要的那种。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2015-02-14
    • 2023-04-03
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多