如何在C ++中确定映射中是否存在值

时间:2018-11-23 17:06:19

标签: c++ stl hashtable

我了解std :: map是(键,值)对。

我想搜索地图的值。让我们说我想在s​​td :: map中的值中找到最高的值。我怎样才能做到这一点 ? 例如,让我考虑这样的地图:

  

John-> 100

     

Jeffrey-> 200

     

克里希纳-> 147

我认为这将与此类似,但是我不确定。

drop_duplicates

除了通过std :: map进行迭代之外,还有其他内置方法可用来通过 O(1) 来检查std :: map中是否存在值

2 个答案:

答案 0 :(得分:1)

  

问题1:如何检查哈希图中是否存在值?

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

  

Q2:如何遍历映射中的所有值并找到最大值或最小值?

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

答案 1 :(得分:0)

对于第二个问题,使用:

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,您还应该能够发现映射(或哈希表)中是否存在值。