访问unordered_maps作为指针

时间:2016-04-03 22:01:18

标签: c++ std unordered-map

出于某种原因,我在编辑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;

我做错了什么?

1 个答案:

答案 0 :(得分:4)

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

但最后一个是不鼓励的。