无法在STL排序中解析对向量的模板

时间:2014-03-12 02:31:02

标签: c++ templates stl

我尝试使用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函数作为比较函数)

1 个答案:

答案 0 :(得分:2)

您可能无法使用支持C ++ 11的编译器进行编译(或者您尚未启用该功能)。如this question中所示,C ++ 03不允许将本地类型作为模板参数(即,您需要将排序函数移到命名空间范围内。)