微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到另一个图内的向量的公共元素

如何解决找到另一个图内的向量的公共元素

| 亲爱的大家, 我有一张地图,定义为
map<int,vector<int> > my_map
。因此,例如,如下所示,
my_map=
0 1 2 6 5 4
1 0 2 3 4 5
2 0 1 4
3 1
4 1 2 0 7 5 6
5 1 0 6 4
6 0 5 4
7 4

vector<int> element_common(map<int,vector<int> > &my_map,int s1,int s2){
     vector<int> common2;
     vector<int> first_vector=my_map[s1];     
     vector<int>::iterator snd_vector_begin= my_map[s2].begin();
     vector<int>::iterator snd_vector_end= my_map[s2].end();          
     for (vector<int>::iterator any=first_vector.begin();
                            any!=first_vector.end();
                            any++){            
         // check if any is in other_list
         vector<int>::iterator any_in_snd_vector_iterator= find (snd_vector_begin,snd_vector_end,*any);            
         if(any_in_snd_vector_iterator==snd_vector_end){
            common2.push_back(*any); 
            }
         }
     return common2;
我在函数上方编写了一个函数,以从矢量部分中获取与2个给定键相关的公共元素。当密钥等于s1和s2时,即s1 = 1和s2 = 4。那么我的函数应该给我0,2,5。但是我有3,4。请帮助我纠正我的功能。     

解决方法

您完全倒退了测试:
if(any_in_2nd_vector_iterator==2nd_vector_end){
当第二个向量中的元素“不存在”时为true。尝试
!=
。 然后,可以通过使用引用避免不必要的向量复制:
const vector<int>& first_vector=my_map[s1];
如果向量变大了,执行散列查找(如果向量始终保持排序,则可以进行预排序合并)比调用必须检查每个元素的
find
更快。     ,如果可以保证对向量进行排序,则可以将性能从O(mn)大大提高到O(m + n):
std::vector<int> common;
std::set_intersection(vec1.begin(),vec1.end(),vec2.begin(),vec2.end(),std::back_inserter(common));
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。