如何查找给定键是否存在于 C std::map 中

新手上路,请多包涵

我正在尝试检查给定的键是否在地图中并且有些无法做到:

 typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here

那么如何打印 p 中的内容?

原文由 There is nothing we can do 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 551
2 个回答

使用 map::findmap::end

 if (m.find("f") == m.end()) {
  // not found
} else {
  // found
}

原文由 anon 发布,翻译遵循 CC BY-SA 4.0 许可协议

我知道这个问题已经有了一些很好的答案,但我认为我的解决方案值得分享。

它适用于 std::mapstd::vector<std::pair<T, U>> 并且可从 C++11 获得。

 template <typename ForwardIterator, typename Key>
bool contains_key(ForwardIterator first, ForwardIterator last, Key const key) {
    using ValueType = typename std::iterator_traits<ForwardIterator>::value_type;

    auto search_result = std::find_if(
        first, last,
        [&key](ValueType const& item) {
            return item.first == key;
        }
    );

    if (search_result == last) {
        return false;
    } else {
        return true;
    }
}

原文由 NutCracker 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题