Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
坐标C++的排序向量_C++_Sorting_Vector_Copying - Fatal编程技术网

坐标C++的排序向量

坐标C++的排序向量,c++,sorting,vector,copying,C++,Sorting,Vector,Copying,我试图对坐标向量进行排序。向量有指向这些坐标的指针。我想按x和y对它们进行排序。我现在想做的是,制作两个向量的副本,然后对它们进行排序。我不确定以下两件事: 1如何制作指针向量的副本 2如何在向量中按x和y对点进行排序,并确保它们正确排序如下1,4,1,5 我一直在阅读并试图弄清楚是否有任何内置函数,但我不确定例如sort函数是否能正确地按顺序对x和y进行排序 这是我到目前为止所拥有的,如果有任何帮助,我将不胜感激 typedef struct{double x; double y;) pt;

我试图对坐标向量进行排序。向量有指向这些坐标的指针。我想按x和y对它们进行排序。我现在想做的是,制作两个向量的副本,然后对它们进行排序。我不确定以下两件事: 1如何制作指针向量的副本 2如何在向量中按x和y对点进行排序,并确保它们正确排序如下1,4,1,5

我一直在阅读并试图弄清楚是否有任何内置函数,但我不确定例如sort函数是否能正确地按顺序对x和y进行排序

这是我到目前为止所拥有的,如果有任何帮助,我将不胜感激

typedef struct{double x; double y;) pt;
vector<pt*>v1;
vector<pt*>*v2 = v1;
// allocate memory for the points and push_back on the vector
the vector would have the following points {(1,7),(4,4),(1,3),(-2,4)}
当为x排序时,它将是 X={-2,4,1,3,1,7,4,4}和 Y={1,3,-2,4,4,4,1,7}

更新:

我目前处于这个阶段,但它仍然不起作用…:

bool compare(pt* m1, pt* m2){return(m1->x <= m2->x) && (m1->y <= m2->y);}

vector<pt*>v1_x = v1;
sort(v1_x.begin(), v1_x.end(), comparer);

使用自定义比较器进行解引用以及现成的词典元组比较非常容易:

#include <algorithm>
#include <tuple>
#include <vector>

struct pt { double x, double y };

std::vector<pt*> v = /* ... */ ;

auto x = v, y = v;   // copies

std::sort(x.begin(), x.end(),
          [](pt * a, pt * b) -> bool
          { return std::tie(a->x, a->y) < std::tie(b->x, b->y); });

std::sort(y.begin(), y.end(),
          [](pt * a, pt * b) -> bool
          { return std::tie(a->y, a->x) < std::tie(b->y, b->x); });

当然,指针指向的对象必须至少在你使用v、x和y中的指针时存在。

真的这么简单吗?@Masterminder:Modulo获得所有所有权语义是正确的,当然,为什么不。因此,一旦我制作了向量的副本,如果我指定了连接部分,排序将真正为我做到这一点?就像它实际上会重新排列指针一样?x和y向量将按照指定的字典顺序进行排序。原始向量v将保持不变。是否可以重写?我收到一些错误消息并试图修复它们,但我的编译器抱怨它没有库支持,而且它目前处于实验阶段。它还说我应该在[]之前有一个主表达式