C++制作地图双对

问题描述:

我有类C++制作地图双对

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; 
}; 

添加功能必须分配给elemts格拉夫;

但是!我不能使用_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; 
} 

我只能使用复制构造函数。 我该怎么做?

+3

请提供[mcve]。 – Barry

+0

您的'graf'映射的键值对是'std :: pair <_t :: vector pair _e>>',您试图插入'std :: pair <_t :: _e>>'。 – user2296177

你可以从std::map::emplace_back汲取灵感,并有自己的Add功能相同的方式工作,以论证构建_T_E对象,而不是那些对象已经构建的实例。

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