C++ const map element access
我试图使用操作符[]访问const C++映射中的元素,但是这个方法失败了。我还试图用"at()"来做同样的事情。这次成功了。但是,在const C++映射中,我找不到任何关于使用"AT-()"来访问元素的引用。"+"是C++映射中新增的函数吗?我在哪里可以找到更多关于这个的信息?非常感谢你!
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <iostream> #include <map> using namespace std; int main() { map<int, char> A; A[1] = 'b'; A[3] = 'c'; const map<int, char> B = A; cout << B.at(3) << endl; // it works cout << B[3] << endl; // it does not work } |
对于使用"b[3]",它在编译期间返回了以下错误:
t01.cpp:14: error: passing ‘const
std::map,
std::allocator > >’ as ‘this’ argument of ‘_Tp&
std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = int, _Tp = char, _Compare = std::less, _Alloc =
std::allocator >]’ discards qualifiers
使用的编译器是G++4.2.1
EDCOX1〔10〕是C++ 11中EDCOX1×12的一种新方法。
如果具有给定键的元素不存在,则不会像
由于这种行为,出现
如果一个元素不存在于EDCOX1 0中,EDCOX1 OR 1将添加它——它显然不能在EDCOX1×2×map中工作,所以C++不定义操作符的EDCOX1×2版本。这是一个很好的编译器类型检查程序示例,可以防止潜在的运行时错误。
在您的例子中,您需要使用
如果给定的键不存在,则[]-运算符将在映射中创建一个新条目。因此,它可能会改变地图。
请参见此链接。
这让我很惊讶,但是STL映射没有
由于运算符[]可能会向映射中插入新元素,因此它不可能是常量成员函数。
我不知道