使用指向映射的指针从其键访问映射的值
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]++
并不代表您认为的那样,因为 mydict
是 dictionary *
而不是 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)++;
我想在 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]++
并不代表您认为的那样,因为 mydict
是 dictionary *
而不是 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)++;