내 코드에서이 multimap은이 : 나는 문제가 발생하고있어필터 이상한 C++ multimap에 값
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
으로 시작하는 멀티 맵 내의 여러 값을 의미 함)
쓰레기 전나무 지도에 t가 표시됩니까? – Wug
나는 멀티 맵 내부의 데이터를 xcode 디버거로 읽을 수 없다. 그래서 문제를 찾기까지 너무 오래 걸렸다. http://stackoverflow.com/a/11856217/393964 noteList 실제로 'addNote' 메쏘드를 가진 private 멤버입니다. 오직 하나의 엘리먼트 만 추가 할 수 있습니다. 키는 내 패턴 (measureNumber * 1000000)을 따라야하며 쓰레기 키는 그렇지 않습니다. – networkprofile