C++:如何通过删除多个元素来删除 "set"?

标签 c++ algorithm function stl set

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/

相关文章:

c++ - 如何将有向无环图保存到磁盘?

algorithm - 用最少的矩形填充多边形

java - 从等于某个数字的数组中选择

javascript - JS : Assignment within if statment doesn't work

javascript - 在函数中访问 javascript 数据

c++ - MFC:动态 CEdit ctrl 没有应用与非动态 CEdit ctrl 相同的视觉样式

c++ - 如何使用 QNetworkAuth 将视频上传到 Youtube

c++ - 如何从 VBA 中的 DLL 获取整数值?

C 数组算法中的最大数

c - 为什么代码会泄漏内存?