Во время проверки кода мой коллега сортировал std :: set с помощью структуры. Я все еще новичок в C ++ и должен был реализовать это сам, чтобы полностью понять это. К сожалению, у меня была некоторая борьба, потому что MSVC заставил меня реализовать operator <после того, как я реализовал operator () структуры. </p>
Может кто-нибудь объяснить мне, почему необходимо реализовать оба оператора, если я использую структуру для сортировки std :: set? Я догадался, что оператор <не нужен, потому что std :: set вызывает некоторую базовую функцию сравнения? </p>
class Hallo {
int one;
int two;
public:
Hallo(int one, int two);
bool operator < (const Hallo& rhs) const
{
return one < rhs.GetOne();
}
struct cmpStruct{
bool operator()(Hallo const &lhs, Hallo const &rhs) const
{
return lhs.GetOne() < rhs.GetOne();
}
int main(int ac, char* av[]){
const Hallo a{ 1, 1 };
const Hallo b{ 2, 2 };
const Hallo c{ 3, 3 };
const Hallo d{ 5, 5 };
std::set<Hallo, Hallo::cmpStruct> sortedList{};
std::set<Hallo> unsortedList{};
sortedList.insert(b);
sortedList.insert(c);
sortedList.insert(a);
sortedList.insert(d);
unsortedList.insert(b);
unsortedList.insert(c);
unsortedList.insert(a);
unsortedList.insert(d);