Ich habe diese STL erklärt multiset
:Wie kann ich zwei Arten von Komparatoren (einen zum Einfügen, einen zum Suchen) auf diesem Multiset einstellen?
multiset<IMidiMsgExt, IMidiMsgExtComp> playingNotes;
und mein Komparator ist:
struct IMidiMsgExtComp {
bool operator()(const IMidiMsgExt& lhs, const IMidiMsgExt& rhs) {
return lhs.mTick < rhs.mTick;
}
};
und dies dient mir gut auf .insert
:
playingNotes.insert(midiMessage);
es Einsätze (und als Aufträge) der Artikel mit der min mTick
an der Spitze und der max mTick
am Ende der Liste. So ist es geordnet nach mTick
, und jeder .begin()
wird ein Objekt mit dem min mTick
Wert zurückgeben.
Nun würde Ich mag innerhalb dieser Liste finden Sie das erste Element, das haben, auf einem anderen Feld mNote
genannt (was int
ist), wird der Wert 60
, und als sie entfernen:
auto iteratorItemFound = playingNotes.find(60);
playingNotes.erase(iteratorItemFound);
aber wie Kann ich festlegen, in welchem Feld die Liste suchen soll? Ein weiterer Komparator?
Sie können 'boost :: multi_index' Array dafür verwenden, oder implementieren Sie das manuell, es sei denn, Sie möchten lineare Suche – Slava
Ich sehe das Update auf die Frage. multi_index ist ein Weg, oder ein sortierter Vektor könnte ein anderer sein. –