c++ - 模板集合的不同排序方法

标签 c++ list sorting templates

很抱歉,如果这个论坛上已经存在类似的问题,如果可以的话,请给我链接。

我有一个模板类

template<typename type>
class DoublyLinkedList {};

我想在其中包含 Sort 方法。

template<typename type>
class DoublyLinkedList
{
public:

void Sort(){}

};

但是列表是模板,所以它可以包含不同的类型。那么我如何为我预见的所有类型创建方法呢?我这样试过:

template<typename type>
class DoublyLinkedList
{
public:

void DoublyLinkedList<int>::Sort(){}
void DoublyLinkedList<string>::Sort(){} 

};

但这是错误的。请帮忙。

最佳答案

标准库一般处理这个问题的方式是让用户指定自己的比较函数。您可以添加一个模板化参数,您的类型的用户可以使用该参数来提供比较功能,例如 std::sort做。在排序的实现中,您假设 comparer 是一个比较列表的两个元素并返回第一个元素是否应该在第二个元素之前的函数。

#include <string>
template<typename type>
class DoublyLinkedList
{
public:
    template<class Comp>
    void Sort(Comp comparer);

};

void foo(DoublyLinkedList<std::string> & list)
{
    // Sort list by length of strings
    list.Sort([](const std::string p_left, const std::string p_right){
        return p_left.size() < p_right.size();
    });
}

关于c++ - 模板集合的不同排序方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724506/

相关文章:

c++ - 序列点、条件和优化

r - 将命名向量转换为命名列表

python - python 中的 ['[a,a,a]' ,'[b,b,b]' ] 和 [[a,a,a],[b,b,b]] 有什么区别?

python - 对 pandas 中的列进行排序只是返回相同的未排序信息

java - 将列表条目排序到映射中的算法的性能

c++ - 适用于 C++ 和 CMake 的定义是什么?

c++ - 如何从文件读取和写入 AES key ?

c++ - 你能模板化一个没有模板化的子类吗?

python - 什么是单一引用的高效容器?

java - 反向 HashMap