迭代 unordered_map 时如何获取指向键的指针?

Posted

技术标签:

【中文标题】迭代 unordered_map 时如何获取指向键的指针?【英文标题】:How I can get a pointer to the key in an unordered_map when I am iterating over it? 【发布时间】:2020-07-27 16:24:44 【问题描述】:

来自 C 思维我对 c++ 标准库的经验很少,我想知道是否有人知道我在迭代 unordered_map 时如何获得指向键的指针? 更具体地说,我正在尝试做这样的事情:

std::unordered_map<std::string, int> my_map;
std::string *the_string_i_care_about;
for(auto& itr : my_map) 
    if (itr.first == "pick me!" ) 
        the_string_i_care_about = &itr.first;
    

...
do stuff with the_string_i_care_about later

如果重要的话,在我的真实代码中,我没有一对字符串和整数,而是两个 POD 结构(我将单位映射到战略游戏中的坐标)。

【问题讨论】:

您显示的代码有什么问题?请提供任何错误消息或您得到的错误结果。 &amp;itr.first??? 【参考方案1】:

std::unordered_map存储key为const,其元素类型为std::pair&lt;const Key, T&gt;the_string_i_care_about 也应该是指向 const 的指针。例如

std::unordered_map<std::string, int> my_map;
const std::string *the_string_i_care_about;
for(auto& itr : my_map) 
    if (itr.first == "pick me!" ) 
        the_string_i_care_about = &itr.first;
    

【讨论】:

但如果它是 const 它不能改变,代码的重点是每次迭代时我可能会得到一个不同的键。当然,在我的示例中,我总是会得到“pick me”的字符串,但假设我正在检查更动态的东西,比如键是我点击的坐标? @SebastianJensen 指针不是const,它可以在运行时指向不同的字符串。但是,如果您想指向 map 中的键,那么它必须是指向 const 字符串的指针。您仍然可以在运行时将其指向不同的 const 字符串。 @SebastianJensen 您可能使用了错误的容器;您不能也不应该直接修改存储在std::unordered_map 中的密钥。

以上是关于迭代 unordered_map 时如何获取指向键的指针?的主要内容,如果未能解决你的问题,请参考以下文章

迭代 unordered_map C++

使用 unordered_map 值初始化指向向量的指针时出错

如何迭代无序映射特定键值?

如何从具有最高值的 unordered_map 中获取密钥?

unordered_map 迭代器迭代到空指针,无视可能性

从 unordered_map 获取键和值列表