Помогите с использованием std :: locale? - PullRequest
1 голос
/ 06 января 2011

У меня есть класс, который я хочу использовать для сортировки моей строки, вектора пары bool.Мои строки имеют кодировку utf-8.Я хочу отсортировать их так, чтобы, если языковой стандарт этого человека был установлен, например, французский, я бы надеялся, что если пользователь введет:

    zap
    apple
    école
    blue
    erable

, это будет выглядеть так:

apple
blue
école
erable
zap

Мой класс std :: locale такой:

class AguiLBLocaleCompare : 
    public std::binary_function<std::pair<std::string, bool>,
    std::pair<std::string,bool>, bool> {
protected:
    const std::collate<char> &coll;
public:
    AguiLBLocaleCompare(std::locale loc)
        : coll(std::use_facet<std::collate<char> >(loc)) {}
    bool operator()(const std::pair<std::string, bool> &a, 
        const std::pair<std::string, bool> &b) const {
        // std::collate::compare() takes C-style string (begin, end)s and
        // returns values like strcmp or strcoll.  Compare to 0 for results
        // expected for a less<>-style comparator.
        return coll.compare(a.first.c_str(), a.first.c_str() + a.first.size(),
            b.first.c_str(), b.first.c_str() + b.first.size()) < 0;
    }
};

, а затем мой метод сортировки элементов:

void AguiListBox::sort()
{
    if(!isReverseSorted())
        std::sort(items.begin(),items.end(),AguiLBLocaleCompare( WHAT_DO_I_PUT_HERE ));
    else
        std::sort(items.rbegin(),items.rend(),AguiLBLocaleCompare(WHAT_DO_I_PUT_HERE));
}

Так что я не уверен, что положить вконструктор для достижения желаемого эффекта.

Я пытался std::locale(), но он сортировал акценты после z в zap, а это не то, что я хочу.*

Спасибо

1 Ответ

1 голос
/ 06 января 2011

Я не думаю, что VC ++ поддерживает локали UTF-8. Вероятно, вам следует преобразовать в wstring и использовать collate<wchar_t> или переключиться на библиотеку C ++, которая поддерживает локали UTF-8.

Имена локалей в Windows / VC ++ отличаются от имен в UNIX; см. Строки языка и страны / региона (CRT) в MSDN.

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