首页 > 解决方案 > 无法在 C++ 中通过 auto 迭代映射

问题描述

我试图通过自动功能迭代这个简单的功能,但它给了我很多错误。我不知道这段代码有什么问题。

#include <vector>
#include <unordered_map>
#include <iostream>
using namespace std;

int main() {
  std::unordered_map<std::string, int> m = {
      {"apples", 5},
      {"bananas", 3},
      {"pears", 7},
  };
  for (auto& [fruit, count] : m) { //line 13
    std::cout << "I have " << count << " " << fruit << ".\n";
  }
}

13 [错误] '[' token13 之前的预期不合格 ID

14 [错误] 预期 ';' 在'['标记之前

13 [错误] 'fruit' 未在此范围内声明

13 [错误] 'count' 未在此范围内声明

还有更多错误。我已经在网上阅读了这个例子,它在那里工作得很好。

标签: c++c++11mapsunordered-mapauto

解决方案


结构化绑定是 C++17 的一个特性。

遍历std::unordered_mapC++11 中的代码看起来像:

for (auto const& p : m) {
    std::cout << "I have " << p.second << " " << p.first << ".\n";
}

推荐阅读