模板集合的不同排序方法

Different sort methods with template collection

本文关键字:排序 方法 集合      更新时间:2023-10-16

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

我有一个模板类

template<typename type>
class DoublyLinkedList {};

我想在其中使用排序方法。

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();
    });
}