2009-10-28 3 views
1

다음 코드는 정상입니까?처음 삽입하지 않고 표준 맵 요소에서 함수 호출

map<int,A> m; 
A a = m[5]; 

어떻게 참조로 액세스에 대한 :

나는이 작업을 수행 할 수 있습니다, 또한

map<int,A> m; 
m[0] = A(); 
m[0].foo(); 

을 그리고 :

class A 
{ 
    public: 
    A(); 
    void foo(); 
}; 

map<int,A> m; 
m[0].foo(); 

또는 내가 다음을 수행해야합니까

void foo(A & a); 
map<int,A> m; 
foo(m[5]); 
+0

오늘 이미 논의되었습니다. http://stackoverflow.com/questions/1639544/why-does-stdmap-operator-create-an-object-if-the-index-doesnt-exist – AnT

답변

5

map :: operator []는 아직 존재하지 않는 경우 새로운 값을 생성합니다. 따라서 모든 코드 예제가 효과적입니다. 상기

이 예 : 두 번째 라인이 중복으로

map<int,A> m; 
m[0] = A(); // redundant 
m[0].foo(); 

가 과잉이다.

1

예, 모두 유효한 용도입니다. operator[]은 이미 호출되었거나 operator[]에 의해 삽입 된 키 - 값 쌍 중 절반 값에 대한 참조를 반환합니다.

0

std :: map의 '[]'연산자를 사용하면 지정된 ID를 가진 항목이 아직없는 경우 새 개체가 자동으로 기본 생성됩니다.

관련 문제