std :: algorithm :: sort的比较器?

Mik*_*ail 1 c++ algorithm

vector< pair<size_t, tuple<double,double> >>
sort_indexes(const vector<tuple<double,double>> &v)
//takes a list and prepends the sorted inxdex
{
    // Copy data
    vector< pair<size_t, tuple<double,double> >> idx(v.size());
    for (size_t i = 0; i != idx.size(); ++i)
    {
        idx[i].first=i ;
        idx[i].second=v[i];
    }
    sort(idx.begin(), idx.end(),
        [&v](size_t i1, size_t i2) {return get<0>(v[i1]) < get<0>(v[i2]);}
        );
    return idx;
}
Run Code Online (Sandbox Code Playgroud)

错误看起来像:

1> C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\VC\include\algorithm(3781):错误C2664:'bool sort_indexes :::: operator()(size_t,size_t)const':无法转换参数1从'std :: pair <_Ty1,_Ty2>'到'size_t'

我很困惑,比较器的形式是什么?我认为它应该是返回布尔值的任何东西?和lambda我提供接缝返回一个布尔值?

当我删除比较器时,代码仍然排序,虽然这种效果不合适,因为索引的排序具有可预测的结果.

zw3*_*324 5

你试图对a进行排序vector< pair<size_t, tuple<double,double> >>,所以比较器必须比较pair<size_t, tuple<double,double> >,而不是size_t.