为啥我插入 std::map 失败?
Posted
技术标签:
【中文标题】为啥我插入 std::map 失败?【英文标题】:Why is my insert into std::map failing?为什么我插入 std::map 失败? 【发布时间】:2009-11-24 00:11:44 【问题描述】:在我的头文件中,我声明了一个这样的地图:
std::map<LPD3DXSPRITE, LPDIRECT3DTEXTURE9> sprites;
在我的 C++ 文件中,我尝试像这样插入:
sprites.insert(sprite, texture);
我传递给 sprites.insert 的类型是正确的。为什么我不能这样插入?正确的插入方法是什么?当我这样做时,我得到的错误是这样的(剪断):
错误 C2664: 'std::_Tree<_traits>::iterator std::_Tree<_traits>::insert(std::_Tree<_traits>::iterator,const std::pair<_ty1> &)' :不能 将参数 1 从 'LPD3DXSPRITE' 到 'std::_Tree<_traits>::iterator'
【问题讨论】:
sprite
和texture
的声明类型是什么?
“我传递给 sprites.insert 的类型是正确的” ORLY? ;-)
@Steve 类型与我在地图中分配的类型相匹配 :)
【参考方案1】:
您需要将您的键和值包装在 std::pair
对象中:
sprites.insert(std::make_pair(sprite, texture));
这是因为std::map
是Pair Associative Container。 std::map<K,V>
的 value_type
是 std::pair<const K,V>
。
【讨论】:
【参考方案2】:或者,您可以使用operator[]
。对于 std::map,这将为您提供autovivify。根据您的操作,可能不需要调用 std::map::insert。
【讨论】:
insert
将检查 map
中是否已存在该值,operator[]
设置键的值而不检查,因此这取决于您需要什么功能以上是关于为啥我插入 std::map 失败?的主要内容,如果未能解决你的问题,请参考以下文章
visual studio 2017 STL 可视化器因一个 std::map<MyIntrusivePtr, std::tuple<....>> 失败