2009-09-21 94 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進行排序。 成對人根據他們的第一個元素進行比較。所以,這樣你就可以得到你想要的種類。