为什么 pair 不能与 unordered_map 一起使用?

Why is pair not working with unordered_map?

以下代码无法编译。 带有 pair 的行给出了错误。是否有其他方式访问数据或者是这个 方法正确??

unordered_map<int,int> hm;
unordered_map<int,int>::iterator it;
it=find(hm.begin(),hm.end(),x+c);
if (it!=hm.end())
{
  bNotFound = false;
  pair<int,int> p = *it;
  ind = p.second;
}

有时编译器对错误消息的处理很糟糕。你的问题是 find 算法。

unordered_map & map 有他们自己的 查找 ,它以 key 作为参数并且 returns 一个迭代器。算法是寻找密钥:

  auto it = hm.find(key);
  if (it != hm.end())
  {
    // ...
  }

全局查找 算法将搜索区间和值作为输入。但它适用于满足某些迭代器约束的任何容器。在映射 的情况下,值不是键 ,就像在 unordered_map::find 中那样,而是(键,值)对。该算法正在 寻找 (key, value) 对。您可以声明您的目标值并像这样使用它:

  unordered_map<int, int>::value_type target{ key, value };
  auto it = find(hm.begin(), hm.end(), target);
  if (it != hm.end())
  {
    // ...
  }