如果我有一个表示为排序范围的集合,则可以使用std::set_difference
计算A\B
和std::set_symmetric_difference
计算A\B U B\A
。如果我想计算两个不同的集合A\B
和B\A
怎么办?
当然,我可以运行std::set_difference
两次,但这似乎不太优雅(如果我们有输入迭代器的话,甚至不可能)。编写自己的实现也很容易,但是我想知道是否有针对此任务的现成解决方案?
最佳答案
如果您的集合都已排序,则可以使用两个迭代器一次完成:
类似于伪代码的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;
}
关于c++ - 一次计算两个设定差A\B和B\A,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34618672/