#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;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c2V0Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IElNaWRpTXNnRXh0IHsKCWludCBtVGljazsKCWludCBtTm90ZTsKfTsKCnN0cnVjdCBJTWlkaU1zZ0V4dENvbXAgewogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IElNaWRpTXNnRXh0JiBsaHMsIGNvbnN0IElNaWRpTXNnRXh0JiByaHMpIHsKICAgICAgICByZXR1cm4gbGhzLm1UaWNrIDwgcmhzLm1UaWNrOwogICAgfQp9OwoKaW50IG1haW4oKSB7CgltdWx0aXNldDxJTWlkaU1zZ0V4dCwgSU1pZGlNc2dFeHRDb21wPiBwbGF5aW5nTm90ZXM7CgkKCXBsYXlpbmdOb3Rlcy5lbXBsYWNlKElNaWRpTXNnRXh0ezEzLCAwfSk7CglwbGF5aW5nTm90ZXMuZW1wbGFjZShJTWlkaU1zZ0V4dHsxMywgNjB9KTsKCXBsYXlpbmdOb3Rlcy5lbXBsYWNlKElNaWRpTXNnRXh0ezEzLCA2MH0pOwoJcGxheWluZ05vdGVzLmVtcGxhY2UoSU1pZGlNc2dFeHR7NDIsIDB9KTsKCXBsYXlpbmdOb3Rlcy5lbXBsYWNlKElNaWRpTXNnRXh0ezQyLCA2MH0pOwoJCglmb3IoYXV0byYgaSA6IHBsYXlpbmdOb3RlcykgewoJCWNvdXQgPDwgaS5tVGljayA8PCAnICcgPDwgaS5tTm90ZSA8PCBlbmRsOwoJfQoJCgljb3V0IDw8IGVuZGw7CgkKCWNvbnN0IGF1dG8gaXQgPSBmaW5kX2lmKGNiZWdpbihwbGF5aW5nTm90ZXMpLCBjZW5kKHBsYXlpbmdOb3RlcyksIFt2YWx1ZSA9IGludHs2MH1dKGNvbnN0IGF1dG8mIGkpe3JldHVybiBpLm1Ob3RlID09IHZhbHVlO30pOwoJCglpZihpdCAhPSBjZW5kKHBsYXlpbmdOb3RlcykpIHsKCQlwbGF5aW5nTm90ZXMuZXJhc2UoaXQpOwoJfQoJCglmb3IoYXV0byYgaSA6IHBsYXlpbmdOb3RlcykgewoJCWNvdXQgPDwgaS5tVGljayA8PCAnICcgPDwgaS5tTm90ZSA8PCBlbmRsOwoJfQkKfQ==