通常比较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进行排序,我该如何使用sort函数?这里的问题是,当我写比较函数时:
bool compare(int *arr,int *arr1)
那么我如何告诉这个函数根据特定索引进行排序?
答案 0 :(得分:5)
只需使用仿函数对象:
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 ) );