Здравствуйте Uk, Вы писали:
Uk>В своей программе создаю STL-вектор из указателей на структуру:
Uk>struct MyClass {
Uk> int x;
Uk>};
Uk>std::vector<MyClass *> m_vecMyClasses;
Uk>Возникла необходимость отсортировать m_vecMyClasses по значению х.
Uk>std::sort(m_vecMyClasses.begin(), m_vecMyClasses.end(), ...)
Uk>Похоже третьим параметром должна идти процедура сравнения, но как правильно описать ее прототип.
Uk>Или же требуется перегрузить оператор <. В моем варианте это представляется, как:
Uk>bool operator<(const MyStruct* & ms1, const MyStruct * & ms2))
Uk>{
Uk> return ms1.x < ms2.x;
Uk>}
Uk>Но это не компилится.
Uk>Или же в принципе правильнее все-таки создавать std::vector<MyClass> m_vecMyClasses, но тогда придется определять для MyClass конструктор по умолчанию и это уже будет не чистая структура.
Uk>Подскажите пожалуйста, в каком направлении двигаться?
По умолчанию для сравнения используется оператор < — но в вашем случае нужно определить объект функцию, либо функцию для сравнения указателей (т.к. в векторе лежат указатели на объекты)
Например так:
// вариант 1 - функция
bool MyClass_Greate(const MyClass* p1, const MyClass* p2)
{
return p1->x > p2->x;
}
// вариант 2 - объект функция
#include <functional>
class SMyClass_Greate : public binary_function<MyClass*,MyClass*,bool>
{
public:
bool operator()(const MyClass* p1, const MyClass* p2)
{
return p1->x > p2->x;
}
};