调试时检查地图的内容

cls*_*udt 8 c++ debugging unordered-map map

对于调试,我需要查看地图(std::unordered_mapstd::map)的内容,Eclipse CDT调试器没有以可读的形式提供给我,例如{1: 2, 3:4, ...}

调试时检查地图内容的最佳方法是什么?

我是否必须使用print-statements返回调试?如果是的话,简洁的宏或函数如何将任何地图的内容打印为字符串?

Ton*_*roy 1

我是否必须返回使用打印语句进行调试?如果是,一个简洁的宏或函数将如何将任何映射的内容打印为字符串?

我不知道你是否这样做 - 我不使用 Eclipse,但打印地图非常简单:

template <typename K, typename V>
std::ostream& operator<<(std::ostream& os, const std::map<K, V>& m)
{
    os << "{ ";
    for (typename std::map<K, V>::const_iterator i = m.begin(); i != m.end(); ++i)
    {
        if (i != m.begin()) os << ", ";
        os << i->first << ": " << i->second;
    }
    return os << " }";
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以使用<< my_map. 请注意,尽管在大型代码库中,其他人可能会有相同的“聪明”想法,因此您可能希望将辅助函数放在您自己的命名空间中,或者给它一个更本地化的名称。"{ "像周围和分隔符的选择是任意的,可能不适合所有用户 - 有些用户可能需要自动字符串引用/转义等,因此将其放入全局命名空间在最好的情况下也是值得怀疑的,在这种情况" }"", "甚至可能保留为可能包含在未来的 C++ 标准或其他内容中 - 毕竟,这有点像将您自己的名称添加到std::命名空间中。如果您关心的话,请查看标准。