访问 unordered_maps 作为指针
accessing unordered_maps as pointers
出于某种原因,我在 unordered_map 中编辑值时遇到问题,想知道我做错了什么。
在下面的代码中,parameter
是一个结构体。出于某种原因,以下代码抛出语法错误,不喜欢 [.
void MyClass::setParameter(string name, parameter param) {
if (this->param_name_to_data == nullptr) {
//create it lazily
this->param_name_to_data = new unordered_map<string, parameter>();
}
this->param_name_to_data->[name] = param;
}
对应.h文件中声明的字典id为:
private:
std::unordered_map<std::string, parameter> * param_name_to_data = nullptr;
我做错了什么?
param_name_to_data->[name] = param;
不是有效语法
当编译器看到 ->
时,它会查找成员变量或成员函数。语句 ->[...]
没有意义,因为单独的 []
既不是成员变量也不是函数。
你可以改写
(*param_name_to_data)[name] = param;
或先将指针指向引用
auto& map = *param_name_to_data;
map[name] = param;
你也可以使用
的丑陋字面形式
param_name_to_data->operator[] (name) = param
但是最后一个让人望而却步
出于某种原因,我在 unordered_map 中编辑值时遇到问题,想知道我做错了什么。
在下面的代码中,parameter
是一个结构体。出于某种原因,以下代码抛出语法错误,不喜欢 [.
void MyClass::setParameter(string name, parameter param) {
if (this->param_name_to_data == nullptr) {
//create it lazily
this->param_name_to_data = new unordered_map<string, parameter>();
}
this->param_name_to_data->[name] = param;
}
对应.h文件中声明的字典id为:
private:
std::unordered_map<std::string, parameter> * param_name_to_data = nullptr;
我做错了什么?
param_name_to_data->[name] = param;
不是有效语法
当编译器看到 ->
时,它会查找成员变量或成员函数。语句 ->[...]
没有意义,因为单独的 []
既不是成员变量也不是函数。
你可以改写
(*param_name_to_data)[name] = param;
或先将指针指向引用
auto& map = *param_name_to_data;
map[name] = param;
你也可以使用
的丑陋字面形式param_name_to_data->operator[] (name) = param
但是最后一个让人望而却步