为啥我插入 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'

【问题讨论】:

spritetexture的声明类型是什么? “我传递给 sprites.insert 的类型是正确的” ORLY? ;-) @Steve 类型与我在地图中分配的类型相匹配 :) 【参考方案1】:

您需要将您的键和值包装在 std::pair 对象中:

sprites.insert(std::make_pair(sprite, texture));

这是因为std::map 是Pair Associative Container。 std::map&lt;K,V&gt;value_typestd::pair&lt;const K,V&gt;

【讨论】:

【参考方案2】:

或者,您可以使用operator[]。对于 std::map,这将为您提供autovivify。根据您的操作,可能不需要调用 std::map::insert。

【讨论】:

insert 将检查 map 中是否已存在该值,operator[] 设置键的值而不检查,因此这取决于您需要什么功能

以上是关于为啥我插入 std::map 失败?的主要内容,如果未能解决你的问题,请参考以下文章

C ++ std :: map在“*”上失败了吗?

std::map的insert和下标[]操作区别

visual studio 2017 STL 可视化器因一个 std::map<MyIntrusivePtr, std::tuple<....>> 失败

使用本机 SQL 创建表适用于 Hibernate/HSQLDB,插入失败。为啥?

为啥latex插入图片失败?

为啥插入重复主键时 Kudu 不会失败?