首页 > 解决方案 > 如何在 unordered_multiset 中的特定时间结束循环

问题描述

早上好,

unordered_multiset当操作中满足特定条件时,我正在尝试循环end。但它不起作用,并且在循环的下一次迭代中出现分段错误。

代码:

std::unordered_multiset<Element, ElementHash>::iterator itr;
Element elementTemp1("");
for (itr = almacen.begin(); itr != almacen.end(); ++itr) {
    Element tmp(*itr);
    if(tmp.getNombre() == "prueba"){
       itr = almacen.end();
    }
}

我该如何解决?或者也许我的结构不正确。

标签: c++c++11stlunordered-multiset

解决方案


那这个呢:

unordered_multiset<Element, ElementHash> :: iterator itr;
Element elementTemp1("");
for (itr = almacen.begin(); itr != almacen.end(); ++itr) {
Element tmp(*itr);
    if(tmp.getNombre == "prueba"){
       break;
    }
}

在该点停止循环break的执行。for那是你要的吗?

正如 Sneftel 在评论中提到的那样:您的程序崩溃是因为 for-loop 的执行方式在每次迭代之后

  1. 执行增量/更改操作(在您的代码中++itr:)
  2. 检查是否循环再次执行(在您的代码中:itr != almacen.end()

但是,当您已经在循环中设置迭代器时,您将almacen.end()无法进一步增加它。但这就是我描述的第 1 步循环迭代之后发生的情况。在那里你的程序崩溃了。


推荐阅读