#include <algorithm>
#include <iostream>
#include <set>
using namespace std;

struct IMidiMsgExt {
	int mTick;
	int mNote;
};

struct IMidiMsgExtComp {
    bool operator()(const IMidiMsgExt& lhs, const IMidiMsgExt& rhs) {
        return lhs.mTick < rhs.mTick;
    }
};

int main() {
	multiset<IMidiMsgExt, IMidiMsgExtComp> playingNotes;
	
	playingNotes.emplace(IMidiMsgExt{13, 0});
	playingNotes.emplace(IMidiMsgExt{13, 60});
	playingNotes.emplace(IMidiMsgExt{13, 60});
	playingNotes.emplace(IMidiMsgExt{42, 0});
	playingNotes.emplace(IMidiMsgExt{42, 60});
	
	for(auto& i : playingNotes) {
		cout << i.mTick << ' ' << i.mNote << endl;
	}
	
	cout << endl;
	
	const auto it = find_if(cbegin(playingNotes), cend(playingNotes), [value = int{60}](const auto& i){return i.mNote == value;});
	
	if(it != cend(playingNotes)) {
		playingNotes.erase(it);
	}
	
	for(auto& i : playingNotes) {
		cout << i.mTick << ' ' << i.mNote << endl;
	}	
}