访问 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

但是最后一个让人望而却步