【发布时间】:2020-07-24 16:49:10
【问题描述】:
问题陈述:有两个数组。一些元素在这些数组中很常见。像 arr1={5,2,6};和 arr2 = {7,9,5,2,3}。因此,5,2 是公共元素,因为它们存在于两个数组中。根据问题,我需要从数组中消除常见元素。所以结果数组包含 arr1={5} 和 arr2={7,9,3}。
我的方法是首先将两个数组合并到第三个数组中,然后使用集合操作消除重复元素。但是在这种方法中,第二次出现的元素被删除,但列表中的元素本身。另外,我得到一个列表而不是两个单独的列表。
我的代码:
#include <iostream>
#include <string>
#include<unordered_set>
int main()
{
std::unordered_set<int> remove_duplicate;
int arr[3]={5,2,6};
int arr1[5]={7,9,5,2,3};
int m= sizeof(arr)/sizeof(arr[0]);
int n= sizeof(arr1)/sizeof(arr1[0]);
int mergearr[m+n];
std::copy(arr,arr+m,mergearr);
std::copy(arr1,arr1+n,mergearr+m);
for(int i=0;i<(m+n);i++){
std::cout<<mergearr[i]<< ' ';
}
std::cout<< '\n';
for(int j=0;j<(m+n);j++){
remove_duplicate.insert(mergearr[j]);
}
for(auto it=remove_duplicate.begin();it!=remove_duplicate.end();++it){
std::cout<<' '<<*it;
}
return 0;
}
输出:
5 2 6 7 9 5 2 3
3 9 7 6 2 5
我该如何解决这个问题?提前谢谢你。
【问题讨论】:
-
我该如何解决这个问题? -- 对两个数组进行排序后使用
std::set_intersection。其次,int mergearr[m+n];——你需要将m和n设为const int,否则该声明是无效的C++。 -
另外,您不能从数组中删除元素,因为数组大小是固定的。
-
另外,为什么
arr的答案等于5?不应该是6吗?
标签: c++ arrays duplicates set