STL算法中有set_union, set_difference, set_intersection, set_symmetric_difference等“集合”运算,但我希望在2个 vector 之间进行:
vector<int> A={1,2,3,4};
vector<int> B={1,3};
我希望得到 A-B,所以 A-B={2,4}。
有没有方便的方法来做这个“减”? 谢谢!
最佳答案
您绝对可以使用 set_
vector
上的算法, 只要 vector
已排序。然后您可以使用 back_inserter()
将输出推送到另一个 vector
:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> v1 {1, 2, 3, 4};
std::vector<int> v2 {1, 3};
std::vector<int> out;
std::set_difference(std::begin(v1), std::end(v1), // the first vector...
std::begin(v2), std::end(v2), // ...minus the second...
std::back_inserter(out)); // ...is stored into here
for(auto i : out) std::cout << i << ' ';
}
打印:
2 4
(请注意,此版本假定它可以使用 <
比较元素,并且元素是根据该元素排序的 - 这在您的情况下显然没问题)。
关于C++:如何通过删除多个元素来删除 "set"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43512556/