Контейнерные классы QString - PullRequest
2 голосов
/ 16 июня 2010

У нас есть приложение для анализа текста, в котором анализируемый текст может быть любой культуры (английский, испанский, тайский, арабский и т. Д.). В разных культурах существуют разные правила для строк: сортировка, переносы слов, определение того, какие символы являютсяи т. д.

Как мне сделать классы контейнеров Qt ориентированными на культуру?Например, если я использую QMap<QString, int>, я хочу, чтобы ключи оставались отсортированными в соответствии с правилами указанной пользователем культуры.(Культура необязательна, так же как и хост-ОС.) Аналогично, она должна учитывать «дубликаты» в соответствии с правилами этой культуры.

В .Net все такие контейнеры могут быть построены с помощью компаратора с учетом культурных особенностей, такого как IEqualityComparer<TKey>.Есть ли эквивалент в Qt?Если нет, то какие обходные пути существуют?

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Как уже указывалось, вы можете использовать std::map, но другой вариант - создать класс LocalizedString с оператором преобразования QString.Если затем вы перегрузите меньше чем и друзей, чтобы они перенесли на localeAwareCompare () или объект сравнения вашего собственного создания, я думаю, вы получите в значительной степени то, что вам нужно.

1 голос
/ 16 июня 2010

Я не думаю, что есть простой способ сделать это с QMap.Это возможно при использовании std::map, который имеет конструктор , который позволяет вам указать пользовательский компаратор.

1 голос
/ 16 июня 2010

QString имеет localeAwareCompare для этой цели. QMap не принимает функцию сравнения в качестве параметра шаблона, но я думаю, вы можете использовать для этого карту STL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...