【问题标题】:Cannot iterate map through auto in C++无法在 C++ 中通过 auto 迭代映射
【发布时间】:2020-07-13 02:31:21
【问题描述】:

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

#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++17 功能,因此在 C++11 中不可用。

标签: c++ c++11 maps unordered-map auto


【解决方案1】:

Structured bindings 是 C++17 功能。

在 C++11 中迭代 std::unordered_map 看起来像:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2011-07-31
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2013-01-11
    • 2017-12-22
    相关资源
    最近更新 更多