我想在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*/
}
但是上面这行来访问键的值会产生编译错误。访问它的正确方法是什么?
答案 0 :(得分:1)
在您的示例中,您尚未实际分配任何dictionary
或(std::unordered_map
)个对象。
dict_array[i]
只是一个空指针。因此,对mydict
的赋值也会导致空指针。您需要首先通过调用dictionary
构建dict_array[i] = new dictionary();
。
表达式mydict[some_key]++
并不代表您的想法,因为mydict
是dictionary *
而不是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)++;