确定映射是否包含键的值?

2024-01-08

确定 STL 映射是否包含给定键的值的最佳方法是什么?

#include <map>

using namespace std;

struct Bar
{
    int i;
};

int main()
{
    map<int, Bar> m;
    Bar b = {0};
    Bar b1 = {1};

    m[0] = b;
    m[1] = b1;

    //Bar b2 = m[2];
    map<int, Bar>::iterator iter = m.find(2);
    Bar b3 = iter->second;

}

在调试器中检查它,看起来像iter只是垃圾数据。

如果我取消注释掉这一行:

Bar b2 = m[2]

调试器显示b2 is {i = 0}。 (我猜这意味着使用未定义的索引将返回一个包含所有空/未初始化值的结构?)

这些方法都不是那么好。我真正想要的是这样的界面:

bool getValue(int key, Bar& out)
{
    if (map contains value for key)
    {
        out = map[key];
        return true;
    }
    return false;
}

是否存在类似的东西?


只要地图不是多重地图,最优雅的方法之一就是使用 count 方法

if (m.count(key))
    // key exists

如果该元素确实存在于地图中,则计数将为 1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定映射是否包含键的值? 的相关文章

随机推荐