2010-02-28 3 views
9

파이썬 사전이 어떻게 작동하는지 이해하는 것과 관련된 질문이 있습니다.파이썬 사전과 C++의 tr1 :: unordered_map의 차이

나는 파이썬에서 문자열을 읽는 것이 해킹을 허용 할 수 없다는 것을 기억하며, 키가 목록을 직접 사용할 수없는 동일한 이유입니다. 즉, 목록은 .append를 지원하여 변경할 수 있으며 따라서 사용할 수 없습니다. 사전 키.

C++에서 unordered_map의 구현이 이러한 경우를 처리하는 방법을 알고 싶었습니다. (C++의 문자열은 변경 가능하므로)

+2

위시 게시물을 편집 할 수 있으므로 "사전"의 " '"을 편집 할 수 있습니다. ;-) (예, 스니키 분위기입니다 .-) –

+0

편집 해 주셔서 감사합니다. :-D –

답변

7

모든 C++ map/set 컨테이너의 키는 const이며 따라서 (컨테이너에 추가 된 후에는) 변경할 수 없습니다.

C++ 컨테이너는 문자열 키와 관련이 없으므로 모든 개체를 사용할 수 있지만 컨테이너가 키를 복사 한 후에는 constness로 인해 수정 작업이 수행되지 않습니다.

+1

누군가가 const_cast를 사용하여 키를 어지럽히는 경우 어떻게 될까요? 감사합니다 –

+0

참조 : http://www.sgi.com/tech/stl/Map.html - 'value_type'은 "지도에 저장된 객체의 유형, 쌍 '으로 정의됩니다. . " 'const'에 유의하십시오. – Dan

+4

@Akshay : 만약 누군가가 그렇게하면, 그들은 가치가있는 것을 얻습니다.'std :: map'은 붉은 검정색 트리를 사용하여 구현됩니다. 키를 변경하면 트리가 무효화됩니다. 'unordered_map'은 해시 테이블을 사용하여 구현됩니다. 키를 변경하면 해당 항목을 다시 찾지 못할 가능성이 있습니다. 새 키의 잘못된 해시 버킷에있을 가능성이 높기 때문입니다. – Dan