如何根据坐标的x或y值对某些坐标进行排序?

时间:2016-05-23 08:51:55

标签: sorting

假设我有 10分,坐标(x,y)。我必须以某种方式对这些点进行排序(1) x如果 x 两点的值相同然后 y 值小于 y 值,则值小于其他位置的位置(2)其他人将处于较早的位置。所以我该如何对这些点进行排序?

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运算符。