У меня есть эта мультикарта в моем коде:
multimap<long, Note> noteList;
// notes are added with this method. measureNumber is minimum `1` and doesn't go very high
void Track::addNote(Note ¬e) {
long key = note.measureNumber * 1000000 + note.startTime;
this->noteList.insert(make_pair(key, note));
}
У меня возникают проблемы, когда я пытаюсь прочитать ноты из последнего такта. В этом случае в песне всего 8 тактов, и именно 8-й такт вызывает проблемы. Если я дойду до 16 тактов, проблема будет именно в 16 тактах и так далее.
// (when adding notes I use as key the measureNumber * 1000000. This searches for notes within the same measure)
for(noteIT = trackIT->noteList.lower_bound(this->curMsr * 1000000); noteIT->first < (this->curMsr + 1) * 1000000; noteIT++){
if(this->curMsr == 8){
cout << "_______________________________________________________" << endl;
cout << "ID:" << noteIT->first << endl;
noteIT->second.toString();
int blah = 0;
}
// code left out here that processes the notes
}
Я добавил только одну ноту к 8-му такту, но вот результат, который я получаю в консоли:
_______________________________________________________
ID:8000001
note toString()
Duration: 8
Start Time: 1
Frequency: 880
_______________________________________________________
ID:1
note toString()
Duration: 112103488
Start Time: 44
Frequency: 0
_______________________________________________________
ID:8000001
note toString()
Duration: 8
Start Time: 1
Frequency: 880
_______________________________________________________
ID:1
note toString()
Duration: 112103488
Start Time: 44
Frequency: 0
Это повторяется. Первый результат — правильная заметка, которую я добавил сам, но я понятия не имею, откуда взялась заметка с ID: 1
.
Есть идеи, как этого избежать? Этот цикл застревает, повторяя одни и те же два результата, и я не могу выбраться из него. Даже если в такте 8 есть несколько заметок (что означает несколько значений в мультикарте, начинающихся с 8xxxxxx
, повторяется только первая заметка и несуществующая.
addNote
, единственным, который может добавлять к нему элементы. Ключ должен следовать моему шаблону (measureNumber*1000000), а мусорный ключ — нет. - person   schedule 09.08.2012