2009-09-21 80 views
3

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

1 Hamlet 
2 Ophelia 
... 
10 Laertes 

代替

1 Hamlet 
10 Laertes 
2 Ophelia 
... 

有谁知道已经支持的比较函子的?
(可传递到std::sort即谓词)

我基本上有两种模式,以支持:前导号(如上所述),和数量在端,类似资源管理器:

Dolly 
Dolly (2) 
Dolly (3) 

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

+0

'std :: sort'不知道任何关于Unicode的内容,所以你不会破坏它。这是需要正确处理它的谓词。您可能不应该按字符分解它,而是标记字符串然后对令牌进行排序。 – MSalters 2009-09-21 10:16:58

+0

我没有计划打破标准::排序:)好主意比较/整理段。 – peterchen 2009-09-21 14:24:01

回答

5

这就是所谓的字母数字排序。
看看这个链接:The Alphanum Algorithm

+0

谢谢! 它不会整理段(而不是逐字符比较),并且不能正确处理超过无符号长整数的数字,但它是一个很好的替代方案。 – peterchen 2009-09-21 14:22:29

1

有一个在Boost Cookbook网站上。它使用Boost Regex库,但应该足够简单,可以转换为任何其他正则表达式库。

http://www.boostcookbook.com/Recipe:/1235053

+0

谢谢 - 我现在想避免依赖boost :: regex。无论如何,该网站有绝对有趣的片段。 – peterchen 2009-09-21 14:23:14

0

我想你可以使用一个对象,然后使vector>然后对这个vector进行排序。 成对人根据他们的第一个元素进行比较。所以,这样你就可以得到你想要的种类。