【发布时间】:2019-09-21 11:58:29
【问题描述】:
我知道如何通过使用std::max_element 来检索std::map 的最大元素,但由于容器类型之间的差异,我无法使用std::unordered_map 实现相同的效果。
如何在std::unordered_map 中找到最大值并返回对应的std::pair?
显示了我当前使用std::map 执行此操作的方法(基于this answer)。我似乎不知道如何为std::unordered_map 做同样的事情。
template <typename KEY_T, typename VALUE_T>
std::pair<KEY_T, VALUE_T> findMaxValuePair(
std::map<KEY_T, VALUE_T> const &x)
{
return *std::max_element(x.begin(), x.end(),
[](const std::pair<KEY_T, VALUE_T> &p1,
const std::pair<KEY_T, VALUE_T> &p2)
{
return p1.second < p2.second;
});
}
当我尝试在std::unorderd_map 上使用上述函数时(将std::map 替换为std::unordered_map,我收到Segmentation fault (core dumped)。
【问题讨论】:
-
当您在这里简单地将
std::map替换为std::unordered_map时会发生什么? -
@SamVarshavchik 出现
Segmentation fault (core dumped)。 -
@paddycakes -- 然后你需要发布一个minimal reproducible example。我们不知道您在何处、何时或如何调用此函数。
-
这一定是由于其他一些与代码无关的问题;但不幸的是,无法弄清楚某些未显示的代码有什么问题;但只有显示的代码符合minimal reproducible example 的所有要求,如stackoverflow.com 的help center 中所述。
-
@paddycakes 此外,您的
std::map版本很可能隐藏了该错误。你应该很高兴unordered_map发现了它。
标签: c++ c++17 unordered-map