gpt4 book ai didi

c++ - 从具有重复键的多映射中仅删除一个元素

转载 作者:太空狗 更新时间:2023-10-29 21:26:16 26 4
gpt4 key购买 nike

我有一个带有 Note 对象的 multimap ,我只想从中删除一个对象。可以有多个 Note 对象具有相同的键。问题是现在还有一些不在我指定的关键范围内的对象被删除:

long key = note.measureNumber * 1000000 + note.startTime; // = 2000001
multimap<long, Note>::iterator it;
for (it = noteList.lower_bound(key); it != noteList.end() && it->first < (key + 1); it++) {
if(it->second.frequency == note.frequency){
noteList.erase(it);
}
}

当我使用 key 2000001 运行此代码时,我能够删除正确的对象,但另一个具有 key 1000017 的对象也被删除。虽然这两个对象具有相同的频率。

知道我的 for 循环有什么问题吗?

编辑:为了清楚起见,我只想检查具有一个特定键的对象(在本例中为 2000001),迭代器无需查看具有不同键的对象那个。

最佳答案

用迭代器调用 erase() 会使它失效,所以你不能继续使用它。

参见 Can I continue to use an iterator after an item has been deleted from std::multimap<>

关于c++ - 从具有重复键的多映射中仅删除一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062067/

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