Компаратор для int
s бесполезен и, вероятно, не определено.Компилятор знает, как сравнивать два целых числа, это часть языка.Он также знает, как сравнить два экземпляра std::pair
.Чего он не знает, так это того, как сравнить два экземпляра класса Point
, который определяется вами.
По сути, у вас есть два варианта:
1.Укажите operator<
для Point
Это позволит вам впоследствии легко сравнить две точки в любой ситуации:
bool operator<(const Point& p1, const Point& p2) {
if (p1.x == p2.x)
{
return p1.y < p2.y;
}
return p1.x < p2.x;
}
2.Предоставьте компаратор на месте для std::sort
Это быстрое решение, если вам нужно только сравнить материал для сортировки.
std::sort(p.begin(), p.end(), [](const auto& p1, const auto& p2) {
//whatever logic it takes to compare two std::pair<int, Point>
});
Примечание: Общая лямбда (сconst auto&
в качестве аргументов) является функцией C ++ 14.Сами лямбды - это функция C ++ 11.
Выбор между ними зависит от использования.Если вам просто нужно отсортировать вектор, или если логика сортировки необычна, выберите компаратор std::sort
.Если вы хотите всегда сравнивать два Point
с одинаковым образом, перейдите к перегрузке оператора.