我正在使用multiset来保存Building实例,我想通过构建height(desc order)来命令,并使用lambda express来定义它。这部分似乎没问题。
我的困惑是关于这一行,buildings.erase(delta);
,执行此行后,从多个节点中删除了一个建筑物,我的预期行为只有id
和height
相等,建筑物z
已被删除。想知道为什么这一行buildings.erase(delta);
会删除我的示例中的建筑物z
?
是否可以定义multiset
按height
排序,但仅在id
和height
相等时删除?
#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;
}