
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Люди добрые, помоготе с сортировкой std::vector<char*> по алфавиту!
|
Сообщ.
#2
,
|
|
|
std::sort
![]() |
Сообщ.
#3
,
|
|
|
![]() ![]() std::sort(Vector.begin(), Vector.end()); |
Сообщ.
#4
,
|
|
|
Цитата HOMO_PROGRAMMATIS @ ![]() ![]() std::sort(Vector.begin(), Vector.end()); ![]() |
Сообщ.
#5
,
|
|
|
std::sort(Vector.begin(), Vector.end()) - это я пробовал, только сортировка очень голимая:
vec.push_back(" c "); vec.push_back(" a "); vec.push_back(" b "); vec.push_back(" e "); vec.push_back(" d "); результат printf: d e b a c т.е. как и сказал Hryak - это сортировка указателей по возрастанию, а не по алфавиту... помогите кто-нить с сабжем |
Сообщ.
#6
,
|
|
|
Sp@m
Напиши свой функтор, который будет сравнивать строки, и передай его в std::sort |
Сообщ.
#7
,
|
|
|
Напиши свой функтор, который будет сравнивать строки - вот это-то и надо как-то сделать
![]() Добавлено причем алгоритм сортировки должен достаточно быстрым... я пишу свой ОпенДиалог для WinCE, поэтому от сортировки напрямую зависит скорость открытия каталога... жду помощи... |
Сообщ.
#8
,
|
|
|
![]() ![]() struct StrLess : public std::binary_function<const char*, const char*, bool> { bool operator ()(const char* s1, const char* s2) { return strcoll(s1, s2) < 0; } }; .... std::sort(vec.begin(), vec.end(), StrLess()); |
Сообщ.
#9
,
|
|
|
А, я просто не обратил внимания что там вектор не на стрингах
![]() |
Сообщ.
#10
,
|
|
|
Hryak, БОЛЬШОЕ спасибо! держи +
|
Сообщ.
#11
,
|
|
|
а может кто сталкивался с сортировкой массива структур, т.е.
struct fff { char* stroka; int a; } dd; создаем массив этих структур: std::vector<fff> vec; надо отсортировать структуры в массиве в алфавитном порядке по fff.stroka (переменная int a - в сортировке не нужна) |
Сообщ.
#12
,
|
|
|
Sp@m, точно так же, как и подсказал Hryak:
![]() ![]() struct FFFLess : public std::binary_function<fff, fff, bool> { bool operator ()(fff &f1, fff &f2) { return strcoll(f1.stroka, f2.stroka) < 0; } } ![]() ![]() struct fff { char* stroka; int a; bool operator < ( const fff &r ) { return strcoll( stroka, r.stroka ) < 0; } }; // сортировка sort( vec.begin(), vec.end() ); |
Сообщ.
#13
,
|
|
|
Точно также:
![]() ![]() struct FFFLess : public std::binary_function<fff, fff, bool> { bool operator ()(fff s1, fff s2) { return strcoll(s1.stroka, s2.stroka) < 0; } }; .... std::sort(vec.begin(), vec.end(), FFFLess()); |
Сообщ.
#14
,
|
|
|
Всем еще раз огромное спасибо, держите +
Добавлено только вот опять проблемка небольшая: сортировка через strcoll или strcmp или std::sort сортирует не очень хорошо по алфавиту, т.к. заглавные буквы идут в начале, потом строчные... для ОпенДиалога это не совсем гуд, надо бы чтоб если слова начинаются с букв 'A' или 'a', то чтоб они так и шли первыми, потом 'б' или 'Б'... Если вышеупомянутый код можно безболезненно подкорректировать, помогите пожалуйста |
Сообщ.
#15
,
|
|
|
Попробуй
![]() ![]() setlocale(LC_COLLATE, "Russian_Russia"); ![]() |