比较两个地图矢量

Dom*_*ger 6 c++ diff

我有两种获取大量数据的方法.数据存储在已排序的中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,fg;

随着vector1:a,b,d,e,f

vector2:a,c,e,f

我想要一个算法告诉我:

额外b的索引1 vector1,和vector2's c != vector1's d.

或(我认为这是一个有效的等效结果)

vector1's b != vector2's cd指数2的额外vector1

编辑

我最终使用了std::set_difference,然后对两个集合中的差异做了一些匹配,以确定哪些条目相似但不同,并且其他向量中完全没有条目.

Gle*_*len 4

类似于std::mismatch算法

您还可以使用std::set_difference