gpt4 book ai didi

c++ - 按结构体的给定成员对结构体数组进行排序(快速排序)

转载 作者:行者123 更新时间:2023-11-30 16:08:25 28 4
gpt4 key购买 nike

我有一个坐标数组(结构类型 vector ),我想首先按 x 坐标对它们进行排序,然后按 y 坐标对它们进行排序。有没有办法将成员(x 或 y)作为参数传递,并按其排序,而不是编写两个单独的快速排序函数?

基本上有一种类型的轴变量,我可以使用它,这样 t[i].axis 意味着当轴为 x 时的 x 坐标,当轴为 y 时的 y 坐标

我的结构:

struct point {
float x, y;
};

编辑:我通过编写一个比较函数来解决这个问题,该函数基于轴进行比较,但如果有人能回答我的问题,我将不胜感激:)

最佳答案

我不完全理解你的问题。但是如果您想选择要对结构体的哪个成员进行排序,那么您可以使用下面非常简单的函数。

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

struct Point {
float x{};
float y{};

friend std::ostream& operator << (std::ostream& os, const Point& p) {
return os << "X: " << std::left << std::setw(6) << p.x << " Y: " << std::setw(6) << p.y << "\n";
}
};

inline void selectiveSort(std::vector<Point>& vp, float Point::* member) {
std::sort(vp.begin(), vp.end(), [&](const Point & p1, const Point & p2) { return p1.*member < p2.*member; });
}

int main(void) {
// Define and initialise vector
std::vector<Point> points{ {1.0,9.0},{2.0,8.0},{3.0,7.0},{4.0,6.0},{5.0,5.0},{6.0,4.0},{7.0,3.0},{8.0,2.0},{9.0,1.0} };

// Sort by y and display result
selectiveSort(points, &Point::y);
std::copy(points.begin(), points.end(), std::ostream_iterator<Point>(std::cout)); std::cout << "\n";

// Sort by x and display result
selectiveSort(points, &Point::x);
std::copy(points.begin(), points.end(), std::ostream_iterator<Point>(std::cout)); std::cout << "\n";

return 0;
}

关于c++ - 按结构体的给定成员对结构体数组进行排序(快速排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59343155/

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