gpt4 book ai didi

c++ - 使用模板函数对列表容器进行排序

转载 作者:行者123 更新时间:2023-11-30 02:58:50 26 4
gpt4 key购买 nike

我有一个header,它由不同的模板函数组成

#include <cmath>

template<class T>
bool lessThan(T x, T y) {

return (x < y);

}

template<class T>
bool greaterThan(T x, T y) {

return (x > y);

}

一类

class Point2D {
public:
Point2D(int x, int y);
protected:
int x;
int y;
double distFrOrigin;

在我的驱动程序类中,我有一个 Point2D 的 STL 列表:list<Point2D> p2dL .如何排序 p2dL使用模板函数 lessThangreaterThan在我的标题中?即根据 x 对列表进行排序或 y值(value)。

编辑:因此,根据 Anton 的评论,我想出了这个:

bool Point2D::operator<(Point2D p2d) {

if (this->x < p2d.x || this->y < p2d.y
|| this->distFrOrigin < p2d.distFrOrigin) {

return true;

}

else {

return false;

}

}

我做对了吗?

最佳答案

首先,所有三个主要模板都可以使用 operator <() 来公开。只要您执行严格的排序:

template<class T>
bool lessThan(const T& x, const T& y)
{
return (x < y);
}

template<class T>
bool greaterThan(const T& x, const T& y)
{
return (y < x);
}

template<class T>
bool equals(const T& x, const T& y)
{
return !(x < y) || (y < x));
}

接下来,您的类必须实现 operator <()比较 *this针对一个参数。下面显示了一个示例:

class Point2D {
public:
Point2D(int x, int y);

// sample that orders based on X primary, and Y if X's are equal.
bool operator <(const Point2D& other) const
{
return (x < other.x || (x == other.x && y < other.y));
}

protected:
int x;
int y;
double distFrOrigin;
};

最后。像这样对列表进行排序:

// sort ascending
std::sort(p2dl.begin(), p2dl.end(), lessThan<Point2D>);

// sort descending
std::sort(p2dl.begin(), p2dl.end(), greaterThan<Point2D>);

或者像 Juan 指出的那样,直接使用列表排序:

p2dl.sort(lessThan<Point2D>);

希望对您有所帮助。

关于c++ - 使用模板函数对列表容器进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428840/

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