问题是如何实现适用于任何类型数据的自定义排序算法(精确排序算法在这里无关紧要)。在Java中,您可以创建一个通用容器,例如List<T>
,其中T
需要实现Comparable接口。这确保了T
类型的任何两个元素都可以使用compareTo
方法进行比较,并且基于它,您可以将总顺序应用于列表的元素。
Java有泛型,C ++有模板。无论如何,C ++根本不使用接口(只是抽象类)。在C ++中实现自定义类型排序的推荐,良好设计方法是什么?例如,我有一个Person
类,我希望按年龄字段(或其他)排序。我该怎么做?
答案 0 :(得分:0)
我会使用一个stl容器,例如vector,然后使用stl sort算法,该算法接受一个可以做你想做的任何事情的比较函数。
答案 1 :(得分:0)
嗯,期望如果类型有排序,可以使用<
运算符进行比较。因此,例如,如果您想使用std::sort
对类/结构进行排序,您可以编写如下内容:
struct foo{
int x, y;
};
inline bool operator< (const foo& lhs, const foo& rhs){ /* do actual comparison */ }
现在std::sort(begin(vec), end(vec)
形式的std::sort
有效。
当然,还有另一种方法可以为结构/类声明<
运算符:
struct foo{
int x, y;
bool operator<(const foo& rhs){
/* do comparison */
}
};
否则你也可以将比较函数作为sort函数的参数,如下所示:
std::sort(begin(vec), end(vec), [](const foo& lhs, const foo& rhs) {
/* do the actual comparison */
});
(作为第三个参数的可能奇怪的东西是lambda函数)
--- ---编辑
希望我能解决所有愚蠢的错误,比如忘记需要的冒号。我责怪上周离开电脑。 : - )