문제

나는 사용하려고합니다 set.insert (key) 조건부로서 키가 올바르게 삽입되면 (키가 아직 세트에 존재하지 않음을 의미하는 경우), 어떤 종류의 코드를 수행해야합니다. 예를 들어 :

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

이것이 허용됩니까? 컴파일러 가이 오류를 던지기 때문에 :

conditional expression of type 'std::_Tree<_Traits>::iterator' is illegal
도움이 되었습니까?

해결책

단일 키 값을 취하는 삽입 버전은 std::pair<iterator,bool>, 여기서 부울은 삽입이 이루어 졌는지 여부를 나타냅니다. True의 값은 값이 삽입되었음을 나타내고, False는 값이 이미 존재했음을 나타냅니다. 따라서 조건부는 다음과 같습니다.

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

다른 팁

set :: 삽입 쌍을 반환하고 이것을 시도하십시오.

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

다른 답변은 단지 '.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.
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top