【问题标题】:Making map double pair制作地图双对
【发布时间】:2016-05-07 16:41:21
【问题描述】:

我有课:

template <typename _T, typename _E>
class CRoute
{ 
  public:
    CRoute& Add(const _T & u1 , const _T & u2 , const _E & e);
    ...
  private:
    map < _T, vector<pair<_T,_E>> > graf;
};

添加函数必须将元素分配给graf;

但是!我不能使用 _T 和 _E 类型的默认构造函数。因此,我无法执行以下操作:

template <typename _T, typename _E>
CRoute<_T,_E>& CRoute<_T,_E>::Add(const _T & u1 , const _T & u2 , const _E & e){      
     graf[u1].emplace_back( u2 , e );
     return *this;
}

我只能使用复制构造函数。 我怎样才能做到?

【问题讨论】:

  • 您的graf 映射的键值对是std::pair&lt;_T, std::vector&lt;std::pair&lt;_T, _E&gt;&gt;,您正在尝试插入std::pair&lt;_T, std::pair&lt;_T, _E&gt;&gt;

标签: c++ dictionary insert std-pair emplace


【解决方案1】:

您可以从std::map::emplace_back 中获得灵感,并让您自己的Add 函数以同样的方式工作,接受构造_T_E 对象的参数,而不是已经构造的这些对象的实例。

否则,您唯一的选择是采用右值引用并希望您的类型是可移动的。

【讨论】:

    猜你喜欢
    • 2014-04-03
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多