将第三个参数传递给C++(STL)的排序函数

Passing a third argument to sort function of C++(STL)

本文关键字:STL C++ 排序 函数 三个 参数传递      更新时间:2023-10-16

c++中sort的正常比较函数有两个参数,例如:

sort(v.begin(),v.end(),compare);
bool compare(int a,int b)
.
.
.

但在向量中,我存储了一个数组,我想sort基于特定索引的向量。即:

int arr[3];
vector<arr> v;

如果我想根据索引0、1或2(取决于用户的输入(对v进行排序,我如何使用排序函数?这里的问题是,当我写比较函数时:

bool compare(int *arr,int *arr1)

那么我如何告诉这个函数根据特定的索引进行排序呢?

只需使用函子对象:

struct coord { int *arr; };
struct Comparer : std::binary_function<coord,coord,bool> {
    Comparer( int base ) : m_base( base ) {}
    bool operator()( const coord &c1, const coord &c1 ) 
    { 
        return c1.arr[m_base] < c2.arr[m_base]; 
    }
private:
    int m_base;
};
//...
std::sort( v.begin(), v.end(), Comparer( 1 ) );