我正在为一个 C++ 类编写一个链表,并且一直在试图弄清楚如何比较两个通用类型的节点以用于排序算法。在 Java 中,我将只实现 Comparable 接口(interface)并使用 compareTo() 方法来确定哪个是“更大”或“更小”,让 Collection 的用户定义它。我可以使用 C++ 中的类似内容吗?我知道我可以覆盖“<”运算符,但我不知道这是否是比较未知类型的“最佳”方法(我知道是主观的;实际上只是询问优缺点,如果还有其他方法的话)。
那么,是否有任何其他选项在运行时比较未知类型似乎比覆盖“<”运算符更合适?
编辑:更改了我需要覆盖的运算符。
最佳答案
据我所知,你有一个列表类模板,你想实现一个 sort()
方法就可以了。我将遵循 std::list<T>
设置的示例为此:
template <typename T>
class List
{
public:
// ...
template <typename Compare>
void sort(Compare compare) {
// use compare(x, y) to determine if x is smaller than y
}
void sort() { this->sort(std::less<T>()); }
};
也就是说,您不会做出固定选择,而是默认使用 operator<()
但允许用户使用不同的排序谓词。只要比较函数实现一个strict weak order什么都可以用。
关于c++ - 比较模板变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336226/