2011-01-12 2 views
-1

어떻게 unordered_map의 복사본을 기존의 컨테이너에서 만들 수 있습니까? 할당 연산자를 사용할 수 있습니까? 아니면 하나씩 반복해야합니까? 또한 shared_ptr을 맵의 값으로 사용하고 있습니다. shared_ptr이기 때문에 특별히주의해야합니까?하나의 STL 컨테이너의 내용을 다른 STL 컨테이너로 복사

typedef unordered_map<string, shared_ptr<classA>>MAP1; 
MAP1 map1; 
map1["abc"] = make_shared<classA>(); 
MAP2 map2 = map1; ?? //can I use assignment operator?? 

감사합니다.

+8

나는 보통이 방식으로 대답하지 않지만 그것을 시도 했습니까? – GManNickG

+0

이것은 보이는 것처럼 많이 할당되지 않습니다. 실제로 MAP2의 생성자에 대한 호출입니다 ... 그러나 아무도 여기서'MAP2'가 무엇인지 알지 못해서 여러분의 질문에 대답하기가 어려울 것입니다. 그리고 정말로 모든 대문자 식별자를 사용하지 말아야하는데, 대개 매크로 용으로 예약되어 있습니다. –

+0

[표준 템플릿 라이브러리] (http://stackoverflow.com/a/5205571/834176)라고 생각합니다. –

답변

1

은 참조 : MAP2의 MSDN std::unordered_map::operator=

내용은 첫째, 제거 후 MAP1의 내용이 복사됩니다 및 MAP2에 위치. 거기에 shared_ptr을 가지고있는 것과 관련된 문제는 보이지 않습니다.

1

예. 가능합니다.

shared_ptr에 대해 복사 된 포인터가 동일한 값을 가리 키도록하려면 no. 두 개의 별도 사본 (딥 카피)을 원하면 직접 복사해야합니다.