2013-09-07 2 views
3

삽입을 사용한 후 std::map이 값을 대체하지 않는 이유가 궁금합니다.
예 :std :: map의 값으로 boost :: flyweight 값

using std::string; 
using boost::flyweight; 
using std::map; 
int main() 
{ 
    map<string,flyweight<string>> testMap; 

    flyweight<string> str("1"); 
    testMap.insert(std::make_pair("1","1")); 
    testMap.insert(std::make_pair("1","2")); 
    str = "2"; 
    printf("Inside map at \"1\" is:%s\r\n",testMap.at("1").get().c_str()); 
    printf("str equals %s",str.get().c_str()); 
} 

인쇄됩니다 int의를 사용하는 경우

str equals 2

Inside map at "1" is: 1

단지 예로서 flyweight<string> 사용은, 같은 일이 발생합니다.

Windows OS, visual 2010 ide에서 작업.
감사합니다, std::map

답변

2

std::pair<iterator,bool> insert(const value_type& value);

이미 새로운 요소가 삽입 또는 이와 동등한 키 경우는 false 경우 한 쌍의 pair::second 요소가 true로 설정되어 여기

을 존재하는 경우 요소를 삽입하지 않습니다 이미 존재했다.

귀하의 질문은 boost

확인 this 페이지의 예와는 아무 상관이있다. 시나리오를 설명합니다.

+0

어 .. thanks P0W. 그것은 내 편이 나쁘다는 것을 나는 확신했다. testMap [ "1"] = flyweight ("2"); 수정 사항. –

+0

@AleksanderFular 예 연산자'[]'는 키의 값을 갱신하지만, 아직 존재하지 않는다면 새로운 키를 삽입한다는 점을 지적하십시오 – P0W

관련 문제