vc ++中组合两个向量的最佳方式

|| 我发现结合2个向量的更好的逻辑。
vector_A[id][mark1];
vector_B[id][mark2];

vector_A: id = [300 , 502, 401 , 900 , 800 ,700 , 250 , 001] 
          mark1 = [55 , 50 , 30 , 28 , 25 , 11 , 04 , 03]

vector_B: id = [800 , 005 , 502 , 925 ,025 ,300 , 52] 
          mark2 = [75, 60 , 50 ,35 , 30 , 25 , 04]
组合规则是:如果在两个向量中找到相同的id,则将mark1和mark2相加。如果不只是显示。
vector_combined: id = [800 , 300 , 502 , 005 , 925 , 401] 
                 mark_combine = [100, 80 , 100 , 60 , 35 ,30]
请为我提供最佳解决方案。     
已邀请:
        因此,我们很乐意为人们提供有关家庭作业问题的提示,前提是他们已经像以前一样积极地将问题视为家庭作业:) 现在,要找到
vector_A
中特定元素的匹配项,您需要扫描
vector_B
中的每个元素。因此,如果在
vector_A
中有m个元素,在
vector_B
中有n个元素,这将花费O(mn)时间来找到所有匹配项-相当慢。 假设我们对这两个向量进行排序,并分别对
mark1
mark2
进行重新排序。现在您注意到的是,当在
vector_B
中查找特定元素时,一旦到达太大的元素就可以立即停止-因为您知道以后所有元素都必须更大。这样可以节省一些时间。 实际上,您可以更进一步,只看
vector_A
vector_B
的第一个元素。让我们分别称这些为
a
b
。现在只有3种情况之一可以发生:
a < b
。在这种情况下,我们可以得出结论:
a
不可能出现在ѭ3anywhere的任何地方,因为后面的所有元素将至少与
b
一样大,后者已经太大了。
a > b
。同样,我们可以得出结论:
b
不可能出现在ѭ2anywhere的任何地方,因为后面的所有元素都将至少与
a
一样大,后者已经太大了。
a = b
。在这种情况下,很明显,这个数字出现在两个向量中! 请记住,排序仅需要O(nlog n)时间,这应该为您提供一个更快算法的重要提示。如果您需要更多帮助,请发表评论。     
        我不确定我是否正确理解您的问题...但是,您是否有机会寻找std :: set_intersection? 该算法要求您对范围进行排序。因此,对它们进行分类并将其喂至
set_intersection
    

要回复问题请先登录注册