【问题标题】:Unable to resolve template in STL sort for vector of pairs无法在 STL 排序中为成对向量解析模板
【发布时间】:2014-03-12 02:31:01
【问题描述】:

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

【问题讨论】:

  • 您确定这是您的确切代码吗?在我看来很好。我整理了一个类似的例子,它编译得很好。你为Tds2 提供什么论据?

标签: c++ templates stl


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 2011-02-15
    • 1970-01-01
    • 2015-01-22
    • 2020-06-05
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多