2016-05-07 16 views
-1

我有類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,std :: vector >',您試圖插入'std :: pair <_T,std :: '<_T, _E>>'。 – user2296177

回答

0

你可以從std::map::emplace_back汲取靈感,並有自己的Add功能相同的方式工作,以論證構建_T_E對象,而不是那些對象已經構建的實例。

否則你唯一的選擇是採取右值引用,並希望你的類型是可移動的。