【发布时间】:2012-04-24 00:27:35
【问题描述】:
我正在尝试遍历我的多重映射中的每个元素,但由于某种原因,它在遍历前两个元素后停止工作。
这是我用来迭代的代码:
for(noteIT = trackIT->noteList.begin(); noteIT != trackIT->noteList.end(); noteIT++){
cout << "noteList size is: " << (int) trackIT->noteList.size() << endl;
cout << "---" << noteIT->second.getName() << endl;
}
这是我得到的输出:
noteList size is: 3
---note1
noteList size is: 3
---note2
但是我的多重地图中有两个以上的元素,我在这里添加它们:
// create notes
Note note1(440, 100, 8, 1, 1);
note1.setName("note1");
Note note2(220, 100, 8, 1, 9);
note2.setName("note2");
Note note3(880, 100, 8, 1, 17);
note3.setName("note3");
synthTrack.addNote(note1);
synthTrack.addNote(note2);
synthTrack.addNote(note3);
这是 addNote 方法的样子:
void Track::addNote(Note ¬e) {
// long key = note.getMeasureNumber() * 1000000 + note.getStartTime();
long key = 1000009;
this->noteList.insert(make_pair(key, note));
}
一个多图可以多次使用相同的键,所以现在每个键都是相等的,但这无关紧要。有什么想法我可能做错了吗?
编辑
Here's a running example。遗憾的是,这个示例按原样工作,并显示了添加到 noteList 的三个注释。然而,上面的代码不起作用,我不知道为什么。
【问题讨论】:
-
如果您发布一个最小的完整示例,我们会有更好的机会。
-
特别是,最好能看到多图模板参数,以及您为
Note定义的operator<函数...... -
没有
operator<功能,因为我不需要订购多图。我将添加一个工作示例 -
这是一个工作示例。可悲的是,简化的示例确实有效,但是在两个 Note 对象与 cout 一起显示后,我的项目其余部分中的代码停止了...我不知道是什么原因造成的
-
这是进步!尝试一个中间案例,简化了大约一半。很快我们就会解决这个问题。