gpt4 book ai didi

c++ - 从 std::multimap 删除元素时的特殊行为

转载 作者:行者123 更新时间:2023-11-27 22:58:21 26 4
gpt4 key购买 nike

我试图从 std::multimap 中删除一个元素,同时我在一个操作它的线程中循环它。我用了erase function通过以下方式

当我这样做的时候

//mItr is base iterator which loops over the multimap

std::multimap<std::string, std::string>::iterator tmpItr = ++mItr;
healthyQ.erase(mItr);
mItr = tmpItr;

以便我可以在从 multimap 中删除元素后验证迭代器,程序在 erase() 调用中停止。所以我通过以下方式使用它来获取下一个有效的迭代器:

mItr = healthyQ.erase(mItr);

成功了。耗费了很多时间,我仍然不确定问题出在哪里

最佳答案

第二种方式是exactly how it is supposed to work

当您将迭代器保存到基于树的容器并删除它时,它会更改指向该节点(和其他节点)的各个节点之间的指针。即使您确切地知道这个节点是什么(通过迭代器),您也不知道下一个节点是什么(以及下一个迭代器)。因此,erase 方法首先 找到下一个节点,执行删除,然后将迭代器返回到下一个节点。

可以看到here移除是如何在红黑树中进行的。

关于c++ - 从 std::multimap 删除元素时的特殊行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30305141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com