2014-12-22 2 views
0

답변이 있으면 사과드립니다. 나는이 문제를 특별히 찾아서 해답을 찾을 수 없었다.포인터의 C++ unordered_set이 요소를 수정할 수 있습니다.

unordered_set에는 사용자 정의 형식에 대한 포인터가 들어 있으며 그 중 하나는 변수 개수입니다.

새로운 개체, 특히 개체에 대한 포인터를 삽입하려고하면 이미 존재하는지 확인합니다. 그럴 경우 해당 개체의 카운트를 증가시킵니다.

질문 : 질문 : C++은 unordered_set의 키인 객체를 어떻게 수정합니까?

auto iter = mySet.find(w); 
if(iter == mySet.end()) { 
    mySet.insert(w); 
} 
else { /* found the element. Increment the count. */ 
    (*iter) -> count += 1; 
} 

위의 코드는 잘 작동하고 예상대로 작동합니다. 첫 번째 이후에 객체를 삽입하려고 시도하면 이후 카운트가 증가합니다.

설명서에 따르면 unordered_set에 대한 반복자는 "const_ 앞에 선행하지 않아도"상수입니다. 누군가 내가 누락 된 것을 친절하게 설명 할 수 있습니까?

추가 정보 : 관련 해시 및 비교 펑터가 정의되어 있으며 템플릿 args로 unordered_set에 전달됩니다.

+2

'iter'는 const 개체에 대한 포인터가 아닌 const 포인터 값입니다. –

+4

'unordered_set'은 요소들, 즉 pointees가 아닌 포인터에 불변성을 적용합니다. pointee에 대한 변경 사항이 사용중인 해쉬 또는 비교 펑터의 결과에 영향을 미치지 않는지 확인하는 것은 귀하의 책임입니다. –

+0

키와 관련 값을 원하기 때문에'set' 대신'map'을 사용해야합니다. –

답변

0

당신은 포인터의 unordered_set을 만들

최저

, 저장된 키 포인터 자체가 아닌 개체의 데이터입니다. 콜렉션은 변경되지 않은 포인터를 적용하거나 rehash가 필요합니다.

그런데 개체의 데이터를 해시하고 포인터를 저장하는 경우 해시 함수의 일부인 필드를 변경하면 수동으로 다시 해시해야 할 수도 있습니다.