假设我有 10分,坐标(x,y)。我必须以某种方式对这些点进行排序(1) x如果 x 两点的值相同然后 y 值小于 y 值,则值小于其他位置的位置(2)其他人将处于较早的位置。所以我该如何对这些点进行排序?
答案 0 :(得分:5)
简单:
#include <algorithm>
#include <utility>
#include <vector>
std::vector<std::pair<int, int>> points;
// populate
std::sort(points.begin(), points.end());
答案 1 :(得分:3)
使用lambda表达式:
std::sort(pts.begin(), pts.end(), [](const auto& a, const auto & b) {
return a.x < b.x || (a.x == b.x && a.y < b.y);
});
并非所有编译器都接受auto
作为lambda参数类型。因此,您可能必须使用正确的类型名称而不是auto
。
如果您正在使用结构,则用户定义的less-than运算符应该可以帮助您:
struct Point
{
int x, y;
};
bool operator<(const Point& a, const Point& b)
{
return a.x < b.x || (a.x == b.x && a.y < b.y);
}
要根据您的要求对std::vector<Point>
进行排序,您只需编写
std::sort(pts.begin(), pts.end());
它将使用您的用户定义的less-than运算符。