2014-10-24 5 views
0

덮어 쓰지 않습니다 m.insert(p2)지도에서 이전 개체를 덮어 쓰지 않는 이유, Map value: 1 : 그것은 인쇄왜 C++ map.insert() 아래의 코드에서

#include <map> 
#include <utility> 
#include <iostream> 

using namespace std; 

int main(){ 
    pair<int,int> p1(1,1); 
    pair<int,int> p2(1,2); 

    map<int,int> m; 
    m.insert(p1); 
    m.insert(p2); 

    cout << "Map value: "<< m.at(1) << endl; 

} 

를? std::map::insert 참조하면

+5

예상되는 동작입니다. – CoryKramer

+0

그게 "삽입하다"라는 뜻입니다. –

답변

1

이 상기된다 : 용기 내로

인서트 요소 (들)가 이미 용기 등가 키 요소를 포함하지 않는 경우.

6

컨테이너에 동일한 키가있는 요소가 아직없는 경우에만 삽입됩니다.

대신 operator[]를 사용해야합니다

m[p2.first] = p2.second; 
+2

질의 :이 작업을 수행하려면 매핑 된 유형이 기본적으로 구성 가능하고 할당 가능해야합니다. –

0

이는 일이되어있다. map.insert()은 아직 요소가 없으면 컨테이너에 요소를 삽입하기 때문에 할당 된 나중 값 요소는 무시됩니다.

2

덮어 쓰기하지 않습니다. 그러나 반환 값을 확인하면 std::pair<iterator, bool>이 있습니다. bool이 true이면 삽입되었습니다. bool이 false이면 충돌로 인해 삽입되지 않았습니다. 그런 다음 이터레이터에 쓰면 데이터를 직접 덮어 쓸 수 있습니다.

관련 문제