#include <algorithm>
#include <vector>
std::vector<SomeType> v1 {...};
std::vector<SomeType> v2 {...};
std::vector<SomeType> diff;
const auto cmp = [](const SomeType &a, const SomeType &b){
//Should return true if a is considered strictly less than b
};
std::sort(v1.begin(), v1.end(), cmp);
std::sort(v2.begin(), v2.end(), cmp);
std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::inserter(diff, diff.begin()), cmp);
但是,如果编写自己的比较器并非易事,那么编写自己的函数来查找向量之间的差异可能会更容易:
#include <algorithm>
#include <vector>
template<typename T>
std::vector<T> vectorDifference(const std::vector<T> &v1, const std::vector<T> &v2){
//Make the result initially equal to v1
std::vector<T> result = v1;
//Remove the elements in v2 from the result
for(const T &element: v2){
const auto it = std::find(result.begin(), result.end(), element);
if(it != result.end()){
result.erase(it);
}
}
return result;
}
2条答案
按热度按时间k3fezbri1#
2ul0zpep2#
The accepted answer仅适用于已排序向量的类型,而
<
运算符已重载。如果你有一个重载了
<
运算符的类型,但是向量没有排序,你需要先排序它们:如果
<
运算符没有被重载,你可以编写自己的比较器:但是,如果编写自己的比较器并非易事,那么编写自己的函数来查找向量之间的差异可能会更容易: