set.insert(key)を条件として使用しますか?
-
03-07-2019 - |
質問
set.insert (key)
を条件として使用しようとしています。キーが正しく挿入されている場合(キーがセットにまだ存在しないことを意味します)、続行して何らかのコードを実行する必要があります。たとえば、次のようなものです。
if (set.insert( key )) {
// some kind of code
}
これは許可されていますか?コンパイラが次のエラーをスローしているため:
conditional expression of type 'std::_Tree<_Traits>::iterator' is illegal
解決
単一のキー値を取るinsertのバージョンは、std::pair<iterator,bool>
を返す必要があります。boolは、挿入が行われたかどうかを示します。値trueは値が挿入されたことを示し、falseは値がすでに存在したことを示します。したがって、条件は次のようになります。
if( set.insert( key ).second ) {
// code
}
他のヒント
set :: insertはペアを返します。これを試してください:
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