与Java泛型相比,C ++中的自定义类型排序

时间:2014-02-16 18:09:37

标签: java c++ templates generics

问题是如何实现适用于任何类型数据的自定义排序算法(精确排序算法在这里无关紧要)。在Java中,您可以创建一个通用容器,例如List<T>,其中T需要实现Comparable接口。这确保了T类型的任何两个元素都可以使用compareTo方法进行比较,并且基于它,您可以将总顺序应用于列表的元素。

Java有泛型,C ++有模板。无论如何,C ++根本不使用接口(只是抽象类)。在C ++中实现自定义类型排序的推荐,良好设计方法是什么?例如,我有一个Person类,我希望按年龄字段(或其他)排序。我该怎么做?

2 个答案:

答案 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函数)

--- ---编辑
希望我能解决所有愚蠢的错误,比如忘记需要的冒号。我责怪上周离开电脑。 : - )