对的任何替代方案?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对的任何替代方案?相关的知识,希望对你有一定的参考价值。

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

答案

你可以使用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; });
另一答案
struct vertex
{
int x;
int y;
};

然后相应地排序结构。

另一答案

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

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

另一答案

最好的方法是@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); }
};
另一答案
int c = x*n + y    where, n>x and n>y 

x=c/n 
y=c%n

当你需要x时,只需c/n将给xy使用c%n给y。

注意:仅适用于正坐标

以上是关于对的任何替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

inline内联函数

重工作的Asynctask替代方案(在UI中添加大量片段)

C# Metro 风格中 IsSubclassOf 或 IsAssignableFrom 的任何替代方案

ClientLoginToken 的替代方案

Android片段不会显示

此反应代码汉堡ingereidnet添加应用程序的替代方案