C ++ multiset擦除混淆

时间:2017-10-16 04:11:50

标签: c++ multiset

我正在使用multiset来保存Building实例,我想通过构建height(desc order)来命令,并使用lambda express来定义它。这部分似乎没问题。

我的困惑是关于这一行,buildings.erase(delta);,执行此行后,从多个节点中删除了一个建筑物,我的预期行为只有idheight相等,建筑物z已被删除。想知道为什么这一行buildings.erase(delta);会删除我的示例中的建筑物z

是否可以定义multisetheight排序,但仅在idheight相等时删除?

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

struct Building {
    int id;
    int height;
    Building(int i, int h) {
        id = i;
        height = h;
    }
};

int main() {
    auto f = [](Building a, Building b) { return a.height > b.height; };
    multiset<Building, decltype(f)> buildings(f);
    Building x(1,100);
    Building y(2, 200);
    Building z(3, 300);
    buildings.insert(x);
    buildings.insert(y);
    buildings.insert(z);
    cout << buildings.size() << endl; 
    Building delta(4, 300);
    buildings.erase(delta);
    cout << buildings.size() << endl; 
}

0 个答案:

没有答案