如果我有一个表示为排序范围的集合,我可以使用std::set_difference
计算A\B
和std::set_symmetric_difference
来计算A\B U B\A
。如果我要同时计算不同的集A\B
和B\A
,该怎么办?
当然,我可以运行std::set_difference
两次,但这似乎并不优雅(如果我们有输入迭代器,甚至不可能)。编写我自己的实现也很容易,但我想知道这个任务是否有现成的解决方案?
答案 0 :(得分:2)
如果您的集合都已排序,则可以使用两个迭代器一次完成:
像伪代码一样的C ++:
iter1 = A.begin();
iter2 = B.begin();
while (iter1 != A.end() && iter2 != B.end()) {
if (*iter1 == *iter2) {
// don't produce anything
++iter1; ++iter2;
} else if (*iter1 < *iter2) {
// produce *iter1 to A\B
++iter1;
} else {
//produce *iter2 to B\A
++iter2;
}
}
while (iter1 != A.end()) {
//produce element to A\B
++iter1;
}
while (iter2 != B.end()) {
//produce element to B\A
++iter2;
}