我已经声明了这个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;
});

09-25 18:11