如何比较 2 个向量并根据比较创建单独的向量
How to compare 2 vectors and create a separate vector based on the comparison
我正在考虑创建一个算法来比较 2 个向量(v1
、v2
(,并创建一个新的向量v3
,该向量将保存v1
和v2
之间不共享的值。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int args[])
{
vector<int> v1 = { 1,2,3,4,5,6,7,8,9 };
vector<int> v2 = { 1,2,6 };
vector<int> v3; //V3 should equal = {3,4,5,7,8,9}.
return 0;
}
向量将始终被排序。
如果像您的示例中一样对范围进行排序,则可以使用 std::set_symmetric_difference
. 它将返回两个范围之间未共享的所有元素。 使用您将使用的示例
std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
所以把这一切放在一起,我们有
int main()
{
std::vector<int> v1 = { 1,2,3,4,5,6,7,8,9 };
std::vector<int> v2 = { 1,2,6 };
std::vector<int> v3; //V3 should equal = {3,4,5,7,8,9}.
std::set_symmetric_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(v3));
for (auto e : v3)
std::cout << e << " ";
return 0;
}
输出:
3 4 5 7 8 9
现场示例
很
抱歉给您带来麻烦,并在此处添加新答案。内森·奥利弗给出了准确的答案。 但是为了好玩,如果我必须编写自己的函数来实现这一点,我在数组而不是 vector 上尝试了它(因为更改 vector 的代码将是微不足道的任务(。
在此处添加我的代码片段。
#include<iostream>
using namespace std;
int arr1[]={2,3,6,10};
int arr2[]={3,5,7,9,10};
int result[10];
int result_size=0;
void getUncommonValues(int *arr1, int size1, int *arr2, int size2){
if ( (size1 == 0) && (size2 == 0) )
return;
if( size1 == 0){
result_size=size2;
for (int i=0; i < size2; i++)
result[i] = arr2[i];
}
if (size2 == 0){
result_size=size1;
for (int i=0; i < size1; i++)
result[i] = arr1[i];
}
int i1=0, i2=0;
while (size1 > i1){
if ( arr1[i1] < arr2[i2]){
result[result_size++] = arr1[i1++];
} else{
if ( arr2[i2] < arr1[i1] )
result[result_size++] = arr2[i2++];
else{
i1++; i2++;
}
}
if ( i2 == size2 ){
for ( ; i1 < size1; i1++)
result[result_size++] = arr1[i1];
}
}
for ( ; i2 < size2 ; i2++){
result[result_size++] = arr2[i2];
}
}
int main(){
getUncommonValues(arr1,sizeof(arr1)/sizeof(int), arr2,sizeof(arr2)/sizeof(int));
for (int i =0; i<result_size; i++)
cout << result[i] <<" ,";
cout << endl;
return 0;
}
注意:这里的结果存储在全局数组中,并且具有固定的大小。 这可以直接在向量中解决。
相关文章:
- C++ 如何比较n个排序的整数向量以找到互元素?
- C++ 向量与用户定义的类比较?(==, <, >)
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 在C++中比较来自向量的字符串时出现分段错误
- 比较向量中的元素时所花费的时间呈指数级增长
- (C++) 学习向量 - 编码/输入流终止/比较向量的问题
- C++比较向量和列表
- 比较向量元件的运行时间复杂性的提高
- 比较向量中元素的最有效、最快捷的方法
- 单词比较 - 向量/getopt
- 如何递归比较向量
- C++ 比较向量<string> X 与字符串 S
- 比较向量的元素
- 比较C++向量的最快方法是什么?
- 比较向量<string>内的线
- 有效的比较向量的方法
- 如何在Eigen中近似比较向量
- 如何以特定的方式高效地比较向量和数组
- 比较向量和添加缺失的元素