你的问题是你end()
之后增加,正确的方法是:
std::unordered_multiset<Element, ElementHash>::iterator itr;
Element elementTemp1("");
for (itr = almacen.begin(); itr != almacen.end(); /* Empty */) {
Element tmp(*itr);
if (tmp.getNombre() == "prueba"){
itr = almacen.end();
} else {
++itr;
}
}
但break
会更简单,你也可以使用for-range:
std::unordered_multiset<Element, ElementHash>::iterator itr;
Element elementTemp1("");
for (/*const*/auto& element : almacen) {
if (element.getNombre() == "prueba"){
break;
}
}
但按原样,循环大多是无用的。
所以也许你想找到你的谓词为真的位置,那么你可以使用std::find_if
auto itr = std::find_if(almacen.begin(), almacen.end(),
[](/*const*/auto& element){ return element.getNombre() == "prueba"; });
if (itr != almacen.end()) {
/*const*/ auto& element = *itr;
// ...
}