operator [ ] in const map

Tags:

C++의 const map 에서는 [ ] 연산자를 쓸 수 없습니다. 그 이유는 [ ]가 map을 변환하기 때문이죠. 따라서 대신 다음과 같이 코딩해야합니다.

#include
#include

using namespace std;

int main()
{
map m;
m[“A”] = 1;
m[“B”] = 2;
m[“C”] = 3;
cout << m["D"] << endl; const map& m2 = m;

// Compile error!
// cout << m2["A"] << endl; map::const_iterator i = m2.find(“A”);
int val = -1;
if (i != m2.end()) val = i->second;
else val = 0;

cout << val << endl; return EXIT_SUCCESS; } [/code] 실행을 해 보면 m["D"] 가 0을 반환함을 볼 수 있습니다. 이처럼 [] 는 실제로 map을 변환할 뿐만 아니라 반환형도 레퍼런스이죠. 해결방법은 역시 코드에 보인대로 find를 쓰고 const_iterator 로 받는 것입니다.