[英]Check if element exists in map c++
是否有任何函数可以查找映射中是否存在某个元素(而不是键)。 例如,我有一个地图,想要查找单词是否是地图中任何一对中的第二个元素,如果是,则其键是什么。
映射是通过键进行组织的,因此缺少对每个元素进行迭代的方法。
假设您正在搜索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
通常被认为是更好的方法,但是在这里可能会过分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
将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
}
请注意,与对数的键搜索不同,对值的搜索是线性的。
扫描原始键值字典需要O(n)
时间,并且可能很慢。
为了快速找到特定值及其键,创建反向字典是一种方法。 对于原始的std::map
作为键值,反向字典为std::unordered_multimap
作为value-key。 查找时间为O(1)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.