2010-06-16 105 views
2

我們有一個文本分析應用程序,其中被分析的文本可以是任何文化(英語,西班牙語,泰語,阿拉伯語等)。不同的文化對字符串有不同的規則:排序,單詞確定哪些字符是相同的,等等。Qt文化感知QString容器類

如何讓Qt容器類具有文化感知能力?例如,如果我使用QMap<QString, int>,我希望這些鍵保持按用戶指定文化的規則排序。 (文化不必與主機操作系統一樣。)同樣,它應該根據該文化的規則考慮「重複」。

在.Net中,所有這樣的容器都可以是constructed,並帶有文化感知比較器,如IEqualityComparer<TKey>。 Qt中是否有相同的內容?如果不是,存在哪些解決方法?

回答

1

我不認爲有一個簡單的方法來做到這一點與QMap。可以使用std::map,它有一個constructor,它可以讓你指定一個自定義比較器。

1

QString確實有localeAwareCompare爲此目的。 QMap不會將比較函數作爲模板參數,但我認爲您可以使用STL映射。

+0

我不認爲你可以爲localeAwareCompare指定一個特定的區域設置(它使用系統區域設置)。另外我需要它是不區分大小寫的。看起來STL地圖可能會出現救援,並與一些ICU區域設置算法結合使用。 – 2010-06-16 18:58:55

2

正如已經指出的那樣,您可以使用std::map,但另一種選擇是創建一個LocalizedString類,該類具有QString轉換運算符。如果你超過了小於和超過了朋友的數量,以至於他們推遲到localeAwareCompare()或者你自己創造的比較對象,我想你最終會得到你所需要的。