1つのオブジェクトのみを削除したいNoteオブジェクトを含むマルチマップがあります。同じキーを持つ複数の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);
}
}
このコードをキーを使用して実行すると2000001
、正しいオブジェクトを消去できますが、キーを使用して別のオブジェクト1000017
も消去されます。ただし、両方のオブジェクトの頻度は同じです。
私のforループの何が問題になっていますか?
編集:明確にするために、私は1つの特定のキー(この場合)を持つオブジェクトのみをチェックしたいので2000001
、イテレーターがそのキーとは異なるキーを持つオブジェクトを調べる必要はありません。