gpt4 book ai didi

c++ - 以 void (*)() 作为值的 Unordered_map 插入无法正常工作

转载 作者:太空狗 更新时间:2023-10-29 20:27:07 27 4
gpt4 key购买 nike

我正在使用这个无序 map :

typedef unordered_map <char, void (*)()> Keymap;
Keymap keys;

并尝试填充它:

void assign(char key, void (*value)())
{
if (keys[key] == NULL)
keys.insert(Keymap::value_type(key, value));
else
keys[key] = value;
}

说明:

keys.insert(Keymap::value_type(key, value));

将 char 插入到键中但值未初始化 (NULL),因此我有一个带有 ('s', NULL) 而不是 ('s', function_pointer) 的映射。

指令keys[key] = value;工作正常。

哪里出错了?

最佳答案

这个表达式:

keys[key] == NULL

特别是子表达式:

keys[key]

具有在 key 为键的映射中插入新的键值对的副作用,对应的值是值初始化的。这就是 std::unordered_mapoperator [] 的工作方式(参见 here )。

另一方面,这个表达式:

keys.insert(Keymap::value_type(key, value));

不会在映射中插入指定的键值对,如果该键已经存在一对(参见,例如,here),并且该值只是在执行时插入:

if (keys[key] == NULL)

所以实际上你想在这里做的只是:

void assign(char key, void (*value)())
{
keys[key] = value;
}

关于c++ - 以 void (*)() 作为值的 Unordered_map 插入无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17153038/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com