Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++ 向量排序 #包括 #包括 #包括 使用名称空间std; 结构点{ 整数指数; int x; int-y; };_C++_Stl - Fatal编程技术网

C++ 向量排序 #包括 #包括 #包括 使用名称空间std; 结构点{ 整数指数; int x; int-y; };

C++ 向量排序 #包括 #包括 #包括 使用名称空间std; 结构点{ 整数指数; int x; int-y; };,c++,stl,C++,Stl,在x的基础上进行比较,在y的基础上打破联系 #include <iostream> #include <algorithm> #include <vector> using namespace std; struct point{ int index; int x; int y; }; bool comp1(常数点和p1、常数点和p2){ 如果(p1.x>p.y; p、 指数=i+1; px.推回(p); py.推回(p); } 排

在x的基础上进行比较,在y的基础上打破联系

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

struct point{
    int index;
    int x;
    int y;
};
bool comp1(常数点和p1、常数点和p2){
如果(p1.x>p.y;
p、 指数=i+1;
px.推回(p);
py.推回(p);
}
排序(px.begin(),px.end(),comp1);
排序(py.begin(),py.end(),comp2);
向量::迭代器;
for(it=px.begin();it!=px.end();it++)

你可以通过使用
std::pair()
的内置
运算符来简化逻辑。从你的代码来看,你想用px
py
做什么并不明显。请明确定义你想做什么。我试图在2D空间中按x和y的递增顺序对点进行排序,例如(2,0)(1,1)(1,0)排序(1,0) (1,1) (2,0)如果您在读取数据时遇到问题,您应该询问一个关于正确执行I/O的问题,而不是关于排序向量的问题。只需再次阅读此问题-您不应该进行两次排序-第二次排序将取代第一次排序。只需使用下面提到的
pair
方法对comp1进行排序-这将首先按x排序然后按(I)的预期进行y工作。不清楚您期望的是什么。如果p1.x==p2.x,我需要按y的递增顺序排序!!std::pair的比较为您做到了这一点--请参见:“按字典顺序比较lhs和rhs,也就是说,比较第一个元素,只有当它们相等时,才比较第二个元素。”
std::tie
是另一个选项。这是真的。虽然我个人认为这种形式很容易出错,而且不能很好地扩展到2个以上的参数。
tie
建议+1,但我最近一直在使用它
bool comp1(const point& p1,const point& p2){
    if(p1.x<p2.x)
        return true;
    if(p1.x==p2.x){
        if(p1.y<p2.y)
            return true;
    return false;
    }

    return true;
}
bool comp2(const point &p1,const point &p2){
    if(p1.y<p2.y)
        return true;
    if(p1.y==p2.y){
        if(p1.x<p2.x)
            return true;
    }
    return false;
}

int main() {
        int n;
        vector<point> px,py;
        cin>>n;
        point p;
        for(int i=0;i<n;i++){
            cin>>p.x>>p.y;
            p.index = i+1;
            px.push_back(p);
            py.push_back(p);

        }

        sort(px.begin(),px.end(),comp1);
        sort(py.begin(),py.end(),comp2);

        vector<point>::iterator it;
        for(it=px.begin();it!=px.end();it++)
            cout<<it->x<<" "<<it->y<<"\t";
        cout<<endl;

        for(it=py.begin();it!=py.end();it++)
            cout<<it->x<<" "<<it->y<<"\t   ";
        cout<<endl;

    return 0;
}
bool comp1(const point& p1,const point& p2){
  return std::make_pair(p1.x, p1.y) < std::make_pair(p2.x, p2.y);
}
// swap x and y order for comp2
bool comp2(const point& p1,const point& p2){
  return std::make_pair(p1.y, p1.x) < std::make_pair(p2.y, p2.x);
}