在 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;
我正在尝试为我的 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;