Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.152.173] |
|
Сообщ.
#1
,
|
|
|
typedef struct _MyStruct { CString name; CString fio; }MyStruct; std::vector<MyStruct> vec; Как отсортировать элементы вектора в алфавитном порядке по полю name? Прочитал вроде бы sort() для этого нужен,но не могу найти пример использования |
Сообщ.
#2
,
|
|
|
Как-то так:
bool CompareStructs( MyStruct m1, MyStruct m2 ) { return m1.name < m2.name; // насколько помню, надо возвращать true, если первый меньше второго } // сортируем sort( vec.begin(), vec.end(), CompareStructs ); |
Сообщ.
#3
,
|
|
|
У меня выдает ошибку
Цитата c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1863): error C2064: term does not evaluate to a function taking 2 arguments std::sort( vec.begin(), vec.end(),CompareStruct(vec.at(j),vec.at(j+1))); Добавлено Все понял в чем дело , у меня то было что-то в этом роде for (size_t j=0;j<vec.size()-1;j++) std::sort( vec.begin(), vec.end(),CompareStruct(vec.at(j),vec.at(j+1))); А нужно сделать CompareStruct как глобальную ф-ию std::sort( vec.begin(), vec.end(), CompareStruct); |
Сообщ.
#4
,
|
|
|
vint, тебе же сказали, надо так:
Цитата KAV @ // сортируем sort( vec.begin(), vec.end(), CompareStructs ); Тебе надо передать саму функцию, а не результат ее вызова. |
Сообщ.
#5
,
|
|
|
по-моему надо вот так:
bool operator < (const MyStruct& m1,const MyStruct& m2 ) { return m1.name < m2.name; } sort(vec.begin(),vec.end()); |
Сообщ.
#6
,
|
|
|
Можно и нак и так. Насколько я помню есть два варианта std::sort, один использует оператор сравнения, другой - переданную ему параметром функцию. Думаю в данном случае второй лучше, так как не перегружает оператор стравнения
Добавлено Хотя всё же лучше передавать в функцию сравнения ссылку (константную). |