对的任何替代方案?

时间:2015-01-13 05:10:50

标签: c++ c functional-programming

我有很多点(a,b),我将x坐标存储在b []的[]和y坐标中。现在我需要用x坐标或y坐标对这些点进行排序。我知道C ++中存在对的概念,但有没有更好的方法来做到这一点。请用C / C ++给出答案。

5 个答案:

答案 0 :(得分:6)

您可以使用std::pair<int, int>存储这对坐标,或者@Gopi的答案用struct表示。

其中任何一个的集合都可以通过X坐标或Y坐标使用lambda函数,仿函数或全局函数进行排序。

// A vector of vertices.
std::vector<std::pair<int, int>> vertices;

// Sort the vertices by X coordinates using a lambda function to order them
std::sort(vertices.begin(), vertices.end(),
         [](auto const& a, auto const& b) { return a.first < b.first; });

// Sort the vertices by Y coordinates using a lambda function to order them
std::sort(vertices.begin(), vertices.end(),
          [](auto const& a, auto const& b) { return a.second < b.second; });

答案 1 :(得分:5)

struct vertex
{
int x;
int y;
};

然后相应地对结构进行排序。

答案 2 :(得分:2)

您可以使用struct指出并在其他答案中显示。但是,如果定义自己的结构,则需要定义比较器函数以与排序算法一起使用或重载<运算符。

使用std::pair的优点是您不需要定义比较器,因为std::pair会重载运算符<以按第一个元素排序,然后排序第二个元素。 有关示例,请参阅此answer

答案 3 :(得分:0)

最好的方法是@Gopi作为答案的结构。对于词典排序,您可以使用std :: tie(http://en.cppreference.com/w/cpp/utility/tuple/tie)。

struct vertex
{
    int x;
    int y;
    bool less_x(const struct vertex& b) const { return std::tie(x,y) < std::tie(b.x, b.y); }
    bool less_y(const struct vertex& b) const { return std::tie(y,x) < std::tie(b.y, b.x); }
};

答案 4 :(得分:0)

x

如果您需要c/n,则x只会yc%n使用lookbehind会给予(<start number>[-+]?\d*\.?\d+<end number>)|([-+]?\d*\.?\d+)

注意:仅适用于正坐标