Внутри operator()
просто сравните значения no
, если значения year
равны:
struct Compare {
bool operator()(const key &lhs, const key &rhs) const {
if (lhs.year == rhs.year) {
return lhs.no < rhs.no;
}
return lhs.year < rhs.year;
}
};
И да, компаратор может быть реализован как отдельная функция:
bool Compare (const key &lhs, const key &rhs) {
if (lhs.year == rhs.year) {
return lhs.no < rhs.no;
}
return lhs.year < rhs.year;
}
В качестве альтернативы вы можете использовать компаратор std::tie()
для сравнения ваших ключевых полей.См. Ответ @ Jarod42.
Тем не менее, было бы более разумно использовать вместо этого operator<
для вашего key
типа:
struct key {
int year;
int no;
bool operator<(const key &rhs) const {
if (year == rhs.year) {
return no < rhs.no;
}
return year < rhs.year;
}
};
Или
struct key {
int year;
int no;
};
bool operator<(const key &lhs, const key &rhs) {
if (lhs.year == rhs.year) {
return lhs.no < rhs.no;
}
return lhs.year < rhs.year;
}
Тогда вам не нужен отдельный компаратор:
map<key, detail> details_map;