使用指向映射的指针从其键访问映射的值

Accessing the values of map from its key using pointer to map

我想在 C++ 中动态分配指向 unordered_map 的指针数组。 std::unordered 映射已被定义为 'dictionary'。

dict_array= ( dictionary **) calloc(input_size, sizeof(dictionary*));

现在我想访问各个散列图,并且对于每个单独的散列图 (mydict),我想使用一些键来访问值。如下所示:

for (int i=0; i< input_size, i++){
   dictionary *mydict= dict_array[i];
   mydict[some_key]++;  /*access the value against 'some_key' and increment it*/
}

但是上面这条针对键访问值的行会产生编译错误。访问它的正确方法是什么?

在您的示例中,您实际上还没有分配任何 dictionary 或 (std::unordered_map) 个对象。

dict_array[i] 只是一个空指针。因此,对 mydict 的赋值也会导致空指针。您需要先通过调用 dict_array[i] = new dictionary();.

来构建 dictionary

表达式 mydict[some_key]++ 并不代表您认为的那样,因为 mydictdictionary * 而不是 dictionary。因此,在访问有效的 dictionary 对象之前,您需要先取消引用它:

(*my_dict)[some_key]++

但同样,在此之前,您需要初始化底层指针。

此外,将 C 分配与 C++ 标准对象混合通常不是一个好主意(这通常会导致未定义的行为)。

你到底为什么要摆弄这样的指针?

如果您真的想要一个指针数组,那么您必须取消引用才能访问地图本身:

(*my_dict)[some_key]++;

假设您已正确设置每个指针以指向有效字典。

或者使用不那么疯狂的数据结构

std::vector<dictionary> dict_array(input_size);

dict_array[i][some_key]++;

使用运算符[]():

mydict->operator[](some_key)++;