gpt4 book ai didi

C++ const std::map 引用无法编译

转载 作者:IT老高 更新时间:2023-10-28 22:23:35 28 4
gpt4 key购买 nike

std::map 的引用作为 const 传递是否会导致 [] 运算符中断?使用 const 时出现此编译器错误(gcc 4.2):

error: no match for ‘operator[]’ in ‘map[name]’

这是函数原型(prototype):

void func(const char ch, std::string &str, const std::map<std::string, std::string> &map);

而且,我要提一下,当我去掉 std::map 前面的 const 关键字时没有问题。

如果我的指示正确,如果 [] 运算符找不到 key ,它实际上会在映射中插入一个新对,这当然可以解释为什么会发生这种情况,但我无法想象这永远是可以接受的行为。

如果有更好的方法,比如使用 find 而不是 [],我将不胜感激。我似乎也无法找到工作...我收到 const 不匹配的迭代器错误。

最佳答案

是的,您不能使用 operator[]。使用 find,但注意它返回 const_iterator 而不是 iterator:

std::map<std::string, std::string>::const_iterator it;
it = map.find(name);
if(it != map.end()) {
std::string const& data = it->second;
// ...
}

就像指针一样。您不能将 int const* 分配给 int*。同样,您不能将 const_iterator 分配给 iterator

关于C++ const std::map 引用无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687789/

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