我们有一个文本分析应用程序,其中被分析的文本可以是任何文化(英语,西班牙语,泰语,阿拉伯语等)。不同的文化对字符串有不同的规则:排序,分词,确定哪些字符是等等。
如何使Qt容器类具有文化感知能力?例如,如果我使用QMap<QString, int>
,我希望密钥根据用户指定的文化规则保持排序。 (文化不一定与主机操作系统相同。)同样,它应该根据该文化的规则考虑“重复”。
在.Net中,所有此类容器都可以constructed使用文化感知比较器,例如IEqualityComparer<TKey>
。 Qt中是否有等价物?如果没有,那么存在哪些变通方法?
答案 0 :(得分:2)
正如已经指出的那样,您可以使用std::map
,但另一种选择是创建一个LocalizedString
类,其中包含QString
转化运算符。如果你然后超过和朋友重载,以便他们按照localeAwareCompare()或你自己创作的比较对象,我认为你最终会得到你需要的东西。
答案 1 :(得分:1)
QString
为此目的确实有localeAwareCompare
。 QMap不将比较函数作为模板参数,但我认为您可以使用STL映射。
答案 2 :(得分:1)
我认为使用QMap
有一种简单的方法可以做到这一点。可以使用具有constructor的std::map
来指定自定义比较器。