假设我有两个多重集合。我想从第一个多重集合中删除在第二个多重集合中出现的所有元素,并保持每个元素在每个多重集合中出现的次数不变。例如,如果多重集合
下面是一些代码可以实现这个功能:
当然,有更好/更惯用的方法吗?
a
包含五次1
,而多重集合b
包含两次1
,那么当我执行a -= b
时,a
中应该只删除两个1
的实例。下面是一些代码可以实现这个功能:
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));
}
当然,有更好/更惯用的方法吗?
i
增加后要对其进行解引用?同样,迭代器是开始习惯于使用++i
的好理由。这是一个有趣的问题。 - Christian Rau