gpt4 book ai didi

c++ - 基于 x 和 y 坐标排序

转载 作者:太空狗 更新时间:2023-10-29 23:37:15 25 4
gpt4 key购买 nike

我想根据 xy 坐标对 vector 进行排序。以下是我所做的,但我想要的是,当我根据 x 进行排序时,我得到了正确的,但是当我根据 y 进行排序时,我没有希望我的 x 订单应该改变。

#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>

struct item_t {
int x;
int y;
item_t( int h, int w ) : x(h), y(w) {}
friend std::ostream& operator<<(std::ostream& os, const item_t& gt) {
os << "(" << gt.x << "," << gt.y << ")";
return os;
}
};
typedef std::vector<item_t> item_list_t;
typedef item_list_t::iterator item_list_itr_t;

struct compare_x {
bool operator ()(const item_t& left, const item_t& rigx) const {
return left.x < rigx.x;
}
};
struct compare_y {
bool operator ()(const item_t& left, const item_t& rigx) const {
return left.y < rigx.y;
}
};

int main ( int argc, char **argv) {
item_list_t items;

items.push_back(item_t(15, 176));
items.push_back(item_t(65, 97));
items.push_back(item_t(72, 43));
items.push_back(item_t(102, 6));
items.push_back(item_t(191, 189));
items.push_back(item_t(90, 163));
items.push_back(item_t(44, 168));
items.push_back(item_t(39, 47));
items.push_back(item_t(123, 37));

std::sort( items.begin(), items.end(), compare_x());
std::copy(items.begin(),items.end(), std::ostream_iterator<item_t>(std::cout," ") );
std::cout << std::endl;

std::sort( items.begin(), items.end(), compare_y());
std::copy(items.begin(),items.end(), std::ostream_iterator<item_t>(std::cout," ") );

std::cout << std::endl;

}

给定一组按递增顺序排列的积分顺序,我想要什么。即 xy 都在增加。

最佳答案

您应该一次完成排序:

struct compare_xy {
bool operator ()(const item_t& left, const item_t& right) const {
return (left.x == right.x ? left.y < right.y : left.x < right.x);
}
};

关于c++ - 基于 x 和 y 坐标排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8613636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com