C++ std::algorithm::sort的比较器?
错误如下所示: 1> C:\ProgramFilesx86\Microsoft Visual Studio 11.0\VC\include\algorithm3781:错误C2664:“布尔排序索引::”运算符 size\t,size\t const':无法将参数1从 “标准::成对”到“尺寸” 我很困惑,比较器的形式是什么?我认为它应该是任何返回布尔值的东西?我提供的lambda返回一个布尔值C++ std::algorithm::sort的比较器?,c++,algorithm,C++,Algorithm,错误如下所示: 1> C:\ProgramFilesx86\Microsoft Visual Studio 11.0\VC\include\algorithm3781:错误C2664:“布尔排序索引::”运算符 size\t,size\t const':无法将参数1从 “标准::成对”到“尺寸” 我很困惑,比较器的形式是什么?我认为它应该是任何返回布尔值的东西?我提供的lambda返回一个布尔值 当我移除比较器时,代码仍然会排序,尽管这种效果并不理想,因为按索引排序有一个可预测的结果。您尝试对向
当我移除比较器时,代码仍然会排序,尽管这种效果并不理想,因为按索引排序有一个可预测的结果。您尝试对向量
简单结论:您的comp不正确,您需要一个std::pair的比较器。简单在gcc-4.9中尝试一下,获得以下信息: 参数1从“std::pair>”到“size_t{aka long unsigned int}”的转换未知
简单结论:您的comp不正确,您需要一个std::pair的比较器。如果按索引排序,则比较器应为:
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;
}
否则:
typedef pair<size_t, tuple<double,double> > param;
sort(idx.begin(), idx.end(), [&v](const param &it, const param &jt) {
return it.first < jt.first;
});
如果按指数排序,则应使用比较器:
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;
}
否则:
typedef pair<size_t, tuple<double,double> > param;
sort(idx.begin(), idx.end(), [&v](const param &it, const param &jt) {
return it.first < jt.first;
});
在这里
comp-比较函数对象,即满足比较要求的对象,返回如果第一个参数较少,即排序在第二个元素之前,则为true
比较函数的签名应等同于以下内容:
bool cmpconst类型1和a、const类型2和b
签名不需要常数&,但函数对象不能修改传递给它的对象。
Type1和Type2类型必须使RandomIt类型的对象可以取消引用,然后隐式转换为这两种类型。
Type1和Type2的类型在代码中是成对的。此处
comp-比较函数对象,即满足比较要求的对象,返回如果第一个参数较少,即排序在第二个元素之前,则为true
比较函数的签名应等同于以下内容:
bool cmpconst类型1和a、const类型2和b
签名不需要常数&,但函数对象不能修改传递给它的对象。
Type1和Type2类型必须使RandomIt类型的对象可以取消引用,然后隐式转换为这两种类型。
Type1和Type2的类型在代码中是成对的