C++使用自己的模板比较功能对数组进行排序

Sorting an array with own template compare function in C++

本文关键字:数组 排序 功能 比较 自己的 C++      更新时间:2023-10-16
template <class T>
bool cmp(const T &a, const T &b){
    return a <= b;
}
template <class T>
void bubble_sort(T tablica[], int size, bool compare(T,T)){
    bool change = true;
    while(change){
        change = false;
        for(int i=0; i < size-1; ++i){
            if(compare(tablica[i+1], tablica[i])){
                zamien(tablica[i+1], tablica[i]);
                change = true;
            }
        }
    }
}

它不起作用,我有错误:

'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' : 
 could not deduce template argument for 'T []' from 'int [10]'  
'void bubble_sort(T [],int,bool (__cdecl *)(T,T))' :
 cannot use function template 'bool cmp(const T,const T)' as a function argument'

但是当我用它替换 CMP 函数时:

bool cmp(const int a, const int b){
    return a <= b;
}

一切正常。如何更改我的 cmp 函数以使用模板?

问题是bubble_sort期望的"比较"函数参数的类型是:

bool compare(T,T)

虽然"cmp"函数的类型是:

bool compare(const T&,const T&)

为了修复它,修改"compare"参数的类型:

template <class T>
void bubble_sort(T tablica[], int size, bool compare(const T&,const T&)){
    /* ... */
}

这是我处理这个问题的方式:

int (*cmp_int)(int,int) = compare<int>;
bubble_sort(in, 5, cmp_int);

现在它应该在 MS 视觉中正常工作。