[英]Unordered.map insert issue with pair keys
std::unordered_map<std::pair<Gdiplus::Color, float>, std::shared_ptr<Gdiplus::Pen>> mymap;
input = std::make_pair(color, width);
When i try to do 当我尝试去做
mymap.insert(std::make_pair(color,width), pen);
I get C2664: 'std::_List_iterator<_Mylist> std::_Hash<_Traits>::insert&>(std::_List_const_iterator<_Mylist>,_Valty)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::_List_const_iterator<_Mylist>' 1> 我得到C2664:'std :: _ List_iterator <_Mylist> std :: _ Hash <_Traits> :: insert&>(std :: _ List_const_iterator <_Mylist>,_ Valty)':无法从'std :: pair <_Ty1,_Ty2转换参数1 >'到'std :: _ List_const_iterator <_Mylist>'1>
i tried doing 我试着做
mymap.insert(std::make_pair(input,pen))
but that also gives me an error. 但这也给我一个错误。 i don't understand why since input is a pair of color and float 我不明白为什么因为输入是一对颜色和浮点数
I'm adding the whole code because i'm still getting issues 我要添加整个代码,因为我仍然遇到问题
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
]
Use emplace(key, value)
or insert(pair)
. 使用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)
takes an iterator as its first argument (as an hint for performance reasons), not a key. insert(it, pair)
将迭代器作为其第一个参数(出于性能原因的提示),而不是键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.