【发布时间】:2012-11-16 08:34:39
【问题描述】:
C++如何利用模板对向量进行排序
大家好,感谢您查看我的问题。
我有一个这样的 Templates.h 文件..
/* Template Less Than */
template<typename T>
bool lessThan(T a,T b)
{
return a<b;
}
/* Template greater Than */
template<typename T>
bool greaterThan(T a,T b)
{
return a>b;
}
/* Template Equals */
template<typename T>
bool equals(T a,T b)
{
return a==b;
}
然后我就上了这门课
Map2D
关于 Map2D..
class Map2D
{
protected:
int x;
int y;
public:
Map2D();
Map2D(int,int);
int getX();
int getY();
};
在我的 main.cpp 中,我得到了 Map2D 的矢量类
vector<Map2D> map2d;
所以现在我需要按 X Ascending 对其进行排序.. 我如何利用模板文件对其 X Ascending 的向量进行排序.. 考虑我稍后需要重载另一个 DESCENDING..
通常我会使用
sort(map2d.begin(),map2d.end(),sortByX);
并且 sortByX 将是一个由 it () 运算符重载的结构。
但是现在的问题是,因为我得到了一个小于和大于的模板。我如何利用它通过 Templates.H 的模板通用函数通过升序对 X 进行排序,然后通过降序对另一个 X 进行排序。
更新:
我想我需要重载类 Map2D 运算符 > 、
但我的问题是如何借助 MyTemplates.h 函数(例如 lesserThan、greaterThan、equals)重载它
谢谢。
【问题讨论】:
-
对不起,您是否暗示您想在编译时执行此操作?或者您只是想在运行时使用您的模板化函数?
-
@SingerOfTheFall 想创建一个函数,可以利用greaterThan lesserThan对int x进行升序和降序排序
-
你的课最后少了一个分号
-
您可能希望知道您的lessThan
模板在所有意图和目的上都与std::less 相同。你重新发明轮子是为了什么? (你仍然需要一个 operator<()来为你的 Map2D 类做这个工作。 -
与显然广泛的意见相反,如果您的模板编码正确并且
operator <()遵循严格的顺序,则不需要重载operator >()和operator ==()来执行greaterThan<T> andequals它应该。
标签: c++ templates sorting vector