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

时间:2015-05-07 17:11:11

标签: c++ pointers hashmap dynamic-arrays unordered-map

我想在C ++中动态分配一个指向unordered_map的指针数组。 std :: unordered map已经被typedef作为' 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*/
}

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

3 个答案:

答案 0 :(得分:1)

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

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

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

(*my_dict)[some_key]++

但是,在此之前,您需要初始化基础指针。

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

答案 1 :(得分:1)

为什么你要乱搞这样的指针?

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

(*my_dict)[some_key]++;

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

或使用较少疯狂的数据结构

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

dict_array[i][some_key]++;

答案 2 :(得分:0)

使用运算符[]():

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