【问题标题】:How to determine whether a value exists in map in C++C++中如何判断一个值是否存在于map中
【发布时间】:2019-04-26 07:08:08
【问题描述】:

我知道 std::map 是 (Key, Value) 对。

我想搜索地图的值。假设我想在 std::map 的值中找到最大值。我怎样才能做到这一点 ? 例如,让我考虑这样的地图:

约翰 -> 100

杰弗里 -> 200

克里希纳 -> 147

我认为它会与此类似,但我不确定。

 for (auto it=m.begin(); it!=m.end(); it++)
    { 
       if (it->second == 500)
          { 
             cout << "Found"; 
          }
        else { 
             continue;}
   }

除了迭代 std::map 之外,还有其他内置方法可以使用 O(1) 来检查 std::map 中是否存在值strong> 时间复杂度?

【问题讨论】:

标签: c++ stl hashtable


【解决方案1】:

对于第二个问题,使用:

std::map<std::string, int> foo = {{"John",100},{"Jeffrey",200},{"Krishna",147}};
std::cout << std::max_element(foo.begin(), foo.end(), [](const auto& p1, const auto& p2){return p1.second < p2.second;})->first;
std::cout << std::min_element(foo.begin(), foo.end(), [](const auto& p1, const auto& p2){return p1.second < p2.second;})->first;

使用带有std::find_if 的调整后的 lambda,您应该也可以找到映射(或哈希表)中是否存在值。

【讨论】:

    【解决方案2】:

    Q1:如何检查hashmap中是否存在值?

    您需要遍历并检查此类项目是否存在。您可以将 `std::find_if() 与 lambda 一起使用,也可以通过循环来实现。如果您经常这样做,您可能还希望索引值(见下文)

    Q2:如何遍历map中的所有值,找到最大值或最小值?

    您再次遍历容器并找到它,或者您也可以将 std::max_element()std::min_element() 与 lambda 一起使用。虽然如果您需要按排序顺序访问值,您可以考虑使用boost::multimap,这将允许按名称使用散列索引访问数据并为值提供排序或散列索引,但您应该知道价格为添加的每个索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-02
      • 2018-05-06
      • 2013-10-02
      • 2012-07-31
      • 2019-03-20
      • 1970-01-01
      • 2011-06-01
      • 2015-02-08
      相关资源
      最近更新 更多