2013-03-30 210 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