我有两种获取大量数据的方法.数据存储在已排序的中vector<map<string, int> >.
我想确定两个向量之间是否存在不一致.
我目前在做什么(伪代码):
for i in 0... min(length(vector1), length(vector2)):
for (k, v) in vector1[i]:
if v != vector2[i][k]:
// report that k is bad for index i,
// with vector1 having v, vector2 having vector2[i][k]
for i in 0... min(length(vector1), length(vector2)):
for (k, v) in vector2[i]:
if v != vector1[i][k]:
// report that k is bad for index i,
// with vector2 having v, vector1 having vector1[i][k]
Run Code Online (Sandbox Code Playgroud)
这一般起作用,但是如果vector1已经拥有a, b, c, d并且vector2具有a, b, b1, c, d(它报告破坏,和)b1,则可怕地破坏.我正在使用一种算法告诉我,与之相比,还有一个额外的条目.cdvector2vector1
我想我想做一些事情,当我遇到不匹配的条目时,我会看第二个向量中的下一个条目,如果在第二个向量的末尾之前找到匹配,则存储i在第二个向量中找到的条目的索引,并开始匹配第一个向量中的下一个条目vector2[i+1].
这样做有一个更简洁的方法吗?我没有遇到过一些标准算法?
我正在使用C++,因此欢迎C++解决方案,但任何语言或伪代码的解决方案也都很棒.
考虑到任意地图对象:a,b,c,d,e,f和g;
随着vector1:a,b,d,e,f
和vector2:a,c,e,f
我想要一个算法告诉我:
额外
b的索引1vector1,和vector2's c != vector1's d.
或(我认为这是一个有效的等效结果)
vector1's b != vector2's c和d指数2的额外vector1
我最终使用了std::set_difference,然后对两个集合中的差异做了一些匹配,以确定哪些条目相似但不同,并且其他向量中完全没有条目.