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 로 받는 것입니다.