2016-12-14 6 views
0

요소를 삽입하기 전에 unorderd_set에 요소가 있는지 확인해야합니까? documentation에 따르면삽입하기 전에 요소가 unorderd_set에 있는지 확인하십시오.

각 요소는 용기에 이미 다른 엘리먼트와 일치하지 않는 경우에만 삽입된다 (AN unordered_set 요소가 고유 값을 가지고).

나는 내 경우 제대로 받고 있어요 그래서 경우 :

그것은 필요하지 않습니다
Element *element = new Element; 
//... 
if (my_set.find (element) == my_set.end()) 
    my_set.insert(element); 

- 올바른? 이미 세트에있는 요소를 삽입하려고하면 실제로 어떻게됩니까? 내가하는 것과 똑같은 수표를 발행합니까?

+1

내부의 다른 문서를 읽고, 누가 복음 있습니다 http://en.cppreference.com/w/cpp/container/unordered_set/insert –

+2

또한 원시 포인터에서 호의를 베풀고 트래 피킹하지 마십시오. –

답변

2

이미있는 값을 삽입하려고하면 집합은 변경되지 않습니다. 호출은 반복자와 Boolean을 포함하는 쌍을 리턴합니다. 항목이 이미 존재하는 경우 부울은 false가됩니다. 세트가 포인터가 포함 된 경우에만 중복 포인터, 내용을 복제하지 않아도 당신을 방지 할 수 있다는

http://en.cppreference.com/w/cpp/container/unordered_set/insert

참고. 예를 들어, Element 개체가 Oxygen과 같은 요소를 나타내는 경우 원자 번호 및 값의 문자열을 포함 할 수 있습니다 (예 :

). 산소가 한 번만 나타나길 원한다면, 포인터 세트는 자동으로 이것을하지 않습니다.

+1

당신이 마지막 문장을 가지고 말하고 싶은 것을 얻지 못합니다 ... 같은 유형의 포인터 (동일한 주소)와 동등해야만한다면 : 당신의 opninion에서 어떤 내용을 복제 할 수 있습니까? –

+0

@SimonKraemer 만약 그가 유일하게 유지하려고하는 Element 오브젝트의 어떤면이 있다면, 포인터 세트를 사용하면 그렇게 할 수 없습니다. –

+0

이제는 더 분명합니다. 업데이트 된 답변 +1. –

0

find()이 있는지 확인하고 개체가 있는지 확인한 다음 삽입합니다.

그래서 코드에서 그들은 두 find(), 한 노골적인 및 insert()