set.insert (키)를 조건부로 사용 하시겠습니까?
-
03-07-2019 - |
문제
나는 사용하려고합니다 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.
}
제휴하지 않습니다 StackOverflow