假设我有两个多重集。我想从第一个多重集中删除第二个多重集中出现的所有元素,尊重每个元素在每个多重集中出现的次数。例如,如果 multiseta
包含1
5 次, multiset 包含b
2 次,当我计算 时,应该只删除 的a -= b
两个实例。1
a
这是一些完成此操作的代码:
multiset<int> a;
multiset<int> b;
// remove all items that occur in b from a, respecting count ("a -= b")
for (multiset<int>::iterator i = b.begin(); i != b.end(); i++) {
if (a.count(*i) < 1) {
// error
}
// a.erase(*i) would remove ALL elements equal to *i from a, but we
// only want to remove one. a.find(*i) gives an iterator to the first
// occurrence of *i in a.
a.erase(a.find(*i));
}
当然有更好/更惯用的方式吗?