Сегодня я написал несколько кодов об использовании std :: sort () для работы с «векторным» типом, который содержит объекты классов, но я нашел много проблем в кодировании, пожалуйста, помогите мне найти решение:
#include <vector>
#include <algorithm>
class Obj{
private:
int m_;
public:
Obj():m_(0) {}
int act() { return m_; }
bool operator<(Obj obj) {
return this->act() < obj.act();
}
};
bool cmp(Obj a, Obj b)
{
return a.act() < b.act();
}
bool cmpA(const Obj& a, const Obj& b)
{
return a.act() < b.act(); // @1 but wrong!
}
int foo()
{
std::vector<Obj> vobj;
// ...
std::sort(vobj.begin(),vobj.end(),cmp); // @2 well, it's ok.
std::sort(vobj.begin(),vobj.end()); // @3 but wrong!
return 0;
}
@ 1: Почему тип параметра должен быть «Obj», а не «const Obj &»? Но когда 'Obj' является структурным типом, это не приведет к ошибке, почему?
@ 3: у меня была перегрузка оператора '<', но здесь невозможно пройти при компиляции. Я что-то упустил?
Пожалуйста, помогите мне, спасибо! </p>