2013-03-30 205 views
0
std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap; 
input = std::make_pair(color, width); 

當我嘗試做Unordered.map插入問題

mymap.insert(std::make_pair(color,width), pen); 

我得到 C2664:「的std :: _ List_iterator < _Mylist>的std :: _哈希< _Traits> ::插入& >(STD :: _ List_const_iterator < _Mylist>,_ Valty):標準::對< _Ty1,_Ty2>不能從轉換參數1 '' 到 '的std :: _ List_const_iterator < _Mylist>' 1>

我試過

mymap.insert(std::make_pair(input,pen)) 

但這也給我一個錯誤。我不明白爲什麼,因爲輸入是一對顏色和浮

我加入整個代碼,因爲我仍然得到問題

std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap; 
std::shared_ptr<Gdiplus::Pen> getPen(Gdiplus::Color const & color, float width) 
{ 
    std::pair<Gdiplus::Color,float> input; 
    input = std::make_pair(color, width); 
    std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>>::const_iterator got = mymap.find (input); 

     if (got == mymap.end()) 
     { 
      auto pen = std::make_shared<Gdiplus::Pen>(); 
      pen->SetColor(color); 
      pen->SetWidth(width); 
      //std::pair<Gdiplus::Color,float> input2; 
      mymap.insert(std::make_pair(input, pen)); 
      return pen;    
     }  
     else 
     { 
      if (std::shared_ptr<Gdiplus::Pen> m_pen = got->second) 
       return m_Pen; 
     } 

} 

};

error C2440: 'type cast' : cannot convert from 'const std::pair<_Ty1,_Ty2>' to 'size_t' with 
     [ 
      _Ty1=Gdiplus::Color, 
      _Ty2=float 
     ] 
+0

什麼是'Gdiplus :: Color'?它是一個枚舉嗎?否則,可能會丟失散列函數。 std :: map工作嗎? – balki

回答

3

使用emplace(key, value)insert(pair)

mymap.emplace(std::make_pair(color, width), pen); 
mymap.insert(std::make_pair(std::make_pair(color, width), pen)); 

insert(it, pair)需要一個迭代作爲它的第一個參數(如出於性能原因的提示),而不是一個密鑰。

+0

我仍然得到錯誤C2440: '類型轉換':不能從 '常量的std ::對<_Ty1,_Ty2>' 到 '爲size_t' 1轉換>與 1> [ 1> _Ty1 = Gdiplus ::顏色, 1> _Ty2 = float 1>] –

+0

它不會說這一行,雖然這是怪異的...生病發布整個代碼 –

+0

@MichaelAfonso:如果您使用的是VC++ 2010,那麼不支持'emplace'。 – ildjarn