Здравствуйте, DivnenkoIvan, Вы писали:
DI>Привет,
DI>наверняка есть решение с помощтю STL такой задачи: есть структура
DI>
DI>struct Data
DI>{
DI> int a;
DI> LPCTSTR str;
DI>};
DI>
DI>и есть вектор std::vector<Data> v;
DI>нужно сделать сортировку по полю str, при условии что сравнение должна выполнять некоторая моя специализированная функция.
DI>как реализовать?
Здравствуйте, DivnenkoIvan, Вы писали:
DI>Привет,
DI>наверняка есть решение с помощтю STL такой задачи: есть структура
DI>
DI>struct Data
DI>{
DI> int a;
DI> LPCTSTR str;
DI>};
DI>
DI>и есть вектор std::vector<Data> v;
DI>нужно сделать сортировку по полю str, при условии что сравнение должна выполнять некоторая моя специализированная функция.
DI>как реализовать?
Здравствуйте, DivnenkoIvan, Вы писали:
DI>Здравствуйте, Кодт, Вы писали:
К>>Здравствуйте, DivnenkoIvan, Вы писали:
DI>>>наверняка есть решение с помощтю STL такой задачи: есть структура К>>
DI>>>struct Data
DI>>>{
DI>>> int a;
DI>>> LPCTSTR str;
DI>>>};
К>>
К>>Так, сразу на всякий случай оффтопик: а строки-то ты где хранишь? На которые у тебя указатели в этой структуре.
DI>для строк выделяется память, попробовал первый предложенный варинт — все работает. но вот
Здравствуйте, DivnenkoIvan, Вы писали:
DI>Здравствуйте, valker, Вы писали:
V>>Знак "меньше" нужно использовать, а не "равенство".
DI> получилось — а почему нельзя == использовать? книжки нет под рукой просто
Ты задаешь желаемый порядок следования элементов. этот элемент больше — его в конец, этот меньше — его в начало. а имея оператор эквивалентности ты порядок не определишь.
Здравствуйте, DivnenkoIvan, Вы писали:
DI>вылетает кстати с азертом и сообщением "invalid operator<"
И немудрено: твой предикат выполняет проверку на равенство, а должен — на упорядоченность.
Следует ли он аксиоматике строгого порядка или нет — элементарно проверяется:
— !p(x,x) — антирефлексивность
— p(x,y) => !p(y,x) — антисимметричность
— p(x,y) & p(y,z) => p(x,z) — транзитивность
Отладочная версия STL эту проверку сделала.