检查map c ++中是否存在元素

时间:2018-05-19 13:37:46

标签: c++ dictionary find key

是否有任何函数可以查找元素是否存在于地图(而不是键)中。 例如,我有一张地图,想要查找一个单词是否是地图中任何一对的第二个元素,如果是,那么它的关键是什么。

3 个答案:

答案 0 :(得分:2)

地图按键组织,因此无法迭代每个元素,因此无法执行此操作。

假设您正在搜索look_for,则可以使用标准库的std::find_if

auto it = std::find_if(map.begin(),
                       map.end(),
                       [&look_for](const auto& kv_pair) {
                            return kv_pair.second == look_for;
                       });
if (it != map.end()) {
    auto key = it->first;
    // ...
} else {
    // Value not found
    // ...
}

也可以使用手动循环(std::find_if通常被认为更好,但这里可能有点过分)

for (const auto& kv_pair : map)
    if (kv_pair.second == look_for)
        return kv_pair.first;
// If you reach this, the value isn't in your map

答案 1 :(得分:0)

std::find_if与lambda:

一起使用
map<int,int> m;
m[1] = 10;
m[2] = 20;
m[3] = 30;
auto target = 20;
auto f20 = std::find_if(std::begin(m), std::end(m), [&](const auto& p) {
    return p.second == target;
});
if (f20 != std::end(m)) {
    // We have our value
}

Demo.

请注意,与搜索对数的键不同,搜索值是线性的。

答案 2 :(得分:0)

扫描原始键值字典需要O(n)时间,而且可能很慢。

要快速查找特定值及其键,创建反向字典是一种方法。 对于键值的原始std::map,对于值键,反向字典为std::unordered_multimap。 查找时间为O(1)