C++比较两个map容器是否相同

注:记录平时碰到的一些问题,保存下来方便查找和复用,同时也是一个加深理解的过程。

需求:
   检查几个不同类型的map容器是否经过数据筛选后发生变化。
实现:

  1. 有多个不同的类型,所以使用模板函数。如果只是单一类型,就不需要用模板函数了。
  2. map的value为结构体,没有重载==,且为1字节对齐,所以比较时使用memcmp() 。需要注意的是,如果不是1字节对齐,结构体中被填充的字节部分可能是随机或无效的内容,此时再用memcmp()就存在问题。两个办法:1)value的类型没有==的,重载实现即可;2)模板函数具体化,根据实际类型比较即可,这个是最稳妥的方式。

代码:

// 对比依据
// 1.大小不同,则不同;
// 2.大小相同,遍历map1,查找map2中是否有相同Key,没有则不同;
// 3.有相同键,比较Value,Value不同则不同。
template<typename K, typename V>
bool CompareMap(const std::map<K, V>& map1, const std::map<K, V>& map2)
{
    if (map1.size() != map2.size())
    {
        return false;
    }

    for (auto it1 : map1)
    {
        auto it2 = map2.find(it1.first);
        if (it2 == map2.end())
        {
            return false;
        }
        else
        {
            if (0 != memcmp(&it1.second, &it2->second, sizeof(V)))
            {
                return false;
            }
        }
    }
    
    return true;
}

你可能感兴趣的:(C++比较两个map容器是否相同)