У меня проблема в том, что мне нужно отсортировать целую кучу указателей на символы, но у них есть специальные символы. Мне удалось получить процедуру сортировки так:
std::sort(dict_.begin(), dict_.end(), comp);
bool comp(NumPair& a, NumPair& b)
{
return boost::lexicographic_compare(a.pFirst, b.pFirst);
}
Это прекрасно работало, за исключением того, что все специальные немецкие символы были отсортированы раньше всех остальных. Мой учитель (да, это относится к домашнему заданию), однако, хочет, чтобы они были отсортированы в конце. Awesome!
Так что я играл и думал, что смогу использовать трюк, который я видел на веб-сайте, чтобы региональная локаль могла включать специальные символы, такие как
return boost::lexicographic_compare(a.pFirst, b.pFirst, locale("german"));
Не сработало! Итак:
bool comp()
{
setlocale(LC_ALL, "");
return boost::lexicographic_compare(a.pFirst, b.pFirst);
}
Не сработало!
Если они у вас есть, я хотел бы услышать некоторые другие идеи, которые могли бы действительно работать.
Обновление:
По запросу, некоторые примеры ввода и вывода:
// Some entries
dict_.push_back( NumPair ( "öffnen", "to open" ) );
dict_.push_back( NumPair ( "überraschen", "to surprise" ) );
dict_.push_back( NumPair ( "wünschen", "to wish, to desire, to want" ) );
dict_.push_back( NumPair ( "widersprechen", "to contradict_" ) );
// NumPair ctor.
NumPair( const char *pFirst, const char *pSecond )
{
/* Deep copy of pFirst and pSecond */
}
Вывод после результата:
öffnen
überraschen
wünschen
widersprechen