我了解std :: map是(键,值)对。
我想搜索地图的值。让我们说我想在std :: map中的值中找到最高的值。我怎样才能做到这一点 ? 例如,让我考虑这样的地图:
John-> 100
Jeffrey-> 200
克里希纳-> 147
我认为这将与此类似,但是我不确定。
drop_duplicates
除了通过std :: map进行迭代之外,还有其他内置方法可用来通过 O(1) 来检查std :: map中是否存在值时间的复杂性?
答案 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,您还应该能够发现映射(或哈希表)中是否存在值。