在 C++ 中分配一个带有列表指针值的标准映射

allocate an std map with list pointer value in c++

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

我的代码是这样的:

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

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

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

std::list<ExecutionGUIObject*>*

表示'pointer to list of pointers to ExecutionGUIObject objects'.

所述,这是地图声明中的一个小语法错误。但是动态分配 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;