我尝试使用How do I sort a vector of pairs based on the second element of the pair?中列出的方法对对象的矢量进行排序,但是 我的编译器似乎无法解析我的模板。
问题区域大致如下:
template <typename T, typename Tds1, typename Tds2>
void myClass<T,Tds1,Tds2>::myMethod(myTemplateParam<T> &in,
myTemplateParam<T> &out) {
typedef std::pair <Tds2, T> labelDistPair;
std::vector< labelDistPair > labelRanks;
struct sort_pairs {
bool operator()(const std::pair<Tds2, T> &left,
const std::pair<Tds2, T> &right)
{return left.second < right.second;}
};
//...
//Fill in labelRanks - a vector of <float, double> pairs
//...
std::sort(labelRanks.begin(), labelRanks.end(), sort_pairs());
}
}
我的错误消息中最相关的部分似乎是:
/ usr / include / c ++ / 4.8 / bits / stl_algo.h:5474:5:注意:模板参数扣除/替换失败: ... 错误:尝试实例化'template void std :: sort(_RAIter,_RAIter,_Compare)'
这有意义吗? (我尝试使用时遇到了类似的错误 lambda函数作为比较函数)
答案 0 :(得分:2)
您可能无法使用支持C ++ 11的编译器进行编译(或者您尚未启用该功能)。如this question中所示,C ++ 03不允许将本地类型作为模板参数(即,您需要将排序函数移到命名空间范围内。)