2014-02-16 59 views
0

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

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

+0

研究标准库中的'sort'函数? –

回答

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 */ 
    } 
}; 

否则,你也可以只取比较函数作为排序函数的参数,就像这样:

std::sort(begin(vec), end(vec), [](const foo& lhs, const foo& rhs) { 
    /* do the actual comparison */ 
}); 

(可能为怪异的事情作为第三个参数是一个lambda函数)

---编辑---
希望我解决了所有愚蠢的错误,如忘记分号在需要的地方。我责备上周离开电脑。 :-)

+0

这正是我所想的。感谢代码片段。 – ducin

0

我会使用一个stl容器,比如vector,然后使用stl sort算法,它接受一个比较函数,它可以做任何你想要的。