首页 > 解决方案 > 为什么我不能在 C++ 中将对象插入到地图中

问题描述

所以我有一个应该返回以下地图的函数:
map<MyObj*, Datastruct>

在尝试从包含所述对象的列表中插入对象时:

for(auto element: myList){  
    Datastruct str;  
    str.property1 = element.property1;  
    str.property2 = element.property2;  
    saidMap.insert(element.PointerToMyObj, str);  
}

myList中的对象包含指向 myObj 的指针和一些我需要从列表移动到地图的属性。在下面的函数中执行了此代码:

map<MyObj*, Datastruct> listToMap = convertList(myList);

编译器对我大喊大叫:

“没有匹配的函数来调用 'std::map::insert(MyObj*&, Datastruct&)”

在这里我很无助。我不知道为什么编译器会显示我正在尝试传递对函数的引用,如果myList 中的元素(见上文)包含

MyObj *PointerToMyObj;

在我看来,哪个是传递给插入函数的正确类型,对吗?我也试过

std::make_pair

于是编译器对我大喊大叫,因为我试图将一对插入
map<MyObj*, Datastruct>.

我完全迷失了。有人可以向我解释我做错了什么吗?

标签: c++dictionaryinsert

解决方案


地图的值类型不是

std::pair<MyObj*, Datastruct>

std::pair<MyObj* const, Datastruct>

大概您在某处对 pair 类型进行了硬编码,但错过了const.

或者,如果你写了saidMap.insert(std::make_pair(element.PointerToMyObj, str))那应该可以工作,但你的代码中还有其他问题。


但它更容易使用emplace

saidMap.emplace(element.PointerToMyObj, str);  

这个 C++11 版本insert拥有“透明”工作所需的所有魔法机制。


推荐阅读