在c ++中分配带有列表指针值的std映射

时间:2015-08-12 07:49:14

标签: c++ list pointers dictionary std

我正在尝试为我的std地图的每个键分配一个列表,但是使用new运算符我得到了一些错误(找不到预定义的构造函数和其他错误),为什么?

我的代码就像这样:

std::map<QString, *std::list<ExecutionGUIObject*>> execEvtMap;

execEvtMap["t1"] = new std::list<ExecutionGUIObject*>;

2 个答案:

答案 0 :(得分:4)

*std::list<ExecutionGUIObject*>

不是有效类型,因此不是std::map模板的有效参数。你可能意味着

std::list<ExecutionGUIObject*>*

表示指向ExecutionGUIObject对象指针列表的指针&#39;。

答案 1 :(得分:1)

正如Frerich Raabe所述,它是地图声明中的一个小语法错误。但是你通过动态分配std::list来获得任何收益,那么为什么要寻找麻烦呢?只需使用列表地图。

std::map<QString, std::list<ExecutionGUIObject*>> execEvtMap;

// Creates a new (empty) list for key "t1" if one does not already exist.
void(execEvtMap["t1"]);

// Creates a new list for key "t1", or clears the existing one.
execEvtMap["t1"].clear();

// Erases a key and its list
execEvtMap.erase("t1");

如果此地图拥有ExecutionGUIObject,那么您也需要进行调整:

std::map<QString, std::list<std::unique_ptr<ExecutionGUIObject>>> execEvtMap;