2008-10-21 2 views
7

set.insert (key)을 조건으로 사용하려고합니다. 여기서 키가 올바르게 삽입 된 경우 (키가 이미 세트에 존재하지 않음을 의미) 계속 진행해야하며 일종의 코드를 수행해야합니다. 예를 들어, 다음과 같습니다.set.insert (key)를 조건부로 사용 하시겠습니까?

if (set.insert(key)) { 
    // some kind of code 
} 

허용 되나요? 컴파일러는이 오류를 던지고 있기 때문에 :

conditional expression of type 'std::_Tree<_Traits>::iterator' is illegal 
+0

나는 당신이 거짓말을하고 있다고 생각합니다. 실종에 대해 불평 할 것입니다. ')'. ;-) –

답변

13

가 하나의 키 값을 취 삽입의 버전하는 std::pair<iterator,bool>을 반환해야합니다 어디에 bool은 삽입 여부를 나타냅니다. true 값은 값이 삽입되었음을 나타내고 false는 값이 이미 있음을 나타냅니다. 같을 것이다 그래서 조건 :

if(set.insert(key).second) { 
     // code 
} 
2

세트 : 삽입 한 쌍을 반환,이 시도 :

if(set.insert(key).second) { 
    // some kind of code 
} 
1

다른 답은 바로 '.second'를 사용하여 제안하고,이 작동합니다 -하지만 당신이 수행해야하는 처리는 다음 세트의 기존 항목을 사용하는 경우 삽입의 전체 결과를 저장할 수 있습니다 :

std::pair<std::set<key>::iterator, bool> iResult = set.insert (key); 
if (iResult.second) { 
    // some kind of code - insert took place 
} 
else { 
    // some kind of code using iResult.first, which 
    // is an iterator to the previous entry in the set. 
} 
관련 문제