c++ - how - if not handlebars js
Usando set.insert(key) como un condicional? (3)
Estoy tratando de usar set.insert (key)
como un condicional, donde si la clave se inserta correctamente (lo que significa que la clave NO existe ya en el conjunto) entonces debería continuar y realizar algún tipo de código. Por ejemplo, algo como:
if (set.insert( key )) {
// some kind of code
}
Está permitido? Porque el compilador está lanzando este error:
conditional expression of type ''std::_Tree<_Traits>::iterator'' is illegal
La versión de la inserción que toma un único valor de clave debe devolver un std::pair<iterator,bool>
, donde el bool indica si se realizó una inserción. Un valor de verdadero indica que el valor fue insertado, y falso indica que el valor ya estaba presente. Entonces su condicional se vería así:
if( set.insert( key ).second ) {
// code
}
Otras respuestas han sugerido simplemente usar ''.second'', y esto funcionará, pero si el procesamiento que necesita realizar utiliza la entrada existente en el conjunto, entonces puede almacenar el resultado completo de la inserción:
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.
}
set :: insert devuelve un par, intente esto:
if( set.insert( key ).second ) {
// some kind of code
}