我已经声明了这个STL multiset
:
multiset<IMidiMsgExt, IMidiMsgExtComp> playingNotes;
我的比较器是:
struct IMidiMsgExtComp {
bool operator()(const IMidiMsgExt& lhs, const IMidiMsgExt& rhs) {
return lhs.mTick < rhs.mTick;
}
};
这在
.insert
上对我很好:playingNotes.insert(midiMessage);
它会插入(并按顺序排列)列表顶部的最小
mTick
和底部的最大mTick
的项目。因此,其按mTick
排序,每个.begin()
将返回带有最小IMidiMsgExt
值的mTick
对象。现在,我想在此列表中找到第一个元素,该元素在另一个名为
mNote
(即int
)的字段上具有值60
,然后将其删除:auto iteratorItemFound = playingNotes.find(60);
playingNotes.erase(iteratorItemFound );
但是如何定义列表应在哪个字段上搜索?另一个比较器?
最佳答案
使用std::find_if。
int value = 60;
auto iteratorItemFound = std::find_if(std::begin(playingNotes), std::end(playingNotes), [value](const IMidiMsgExt& msg)
{
return msg.mNote == value;
});