映射基于自动的循环单元素访问 C++

map auto-based loop single element access C++

除了 auto 循环

之外,我正在尝试理解 "theory"

std::map

C++ 中的元素。 我有一个 std::map,其中 std::string 作为 KEY,vector<std:string> 作为 VALUE。我可以通过以下方式访问它的元素:

for ( auto &element : myMap ) {
    std::cout << element.first << ": " << '\t';
    for ( std::string subElement : element.second ) std::cout << subElement << ", ";
  }
}

至于 vector<string> 元素的循环,我知道我可以用 "auto" 代替 "std::string"。但是在这种情况下地图的等价物是什么?我四处研究和搜索,发现在 that post 中每个地图元素都作为

访问

map< K, V>::value_type

但是我该如何写下来呢?我试过了:

for ( std::map<std::string, vector<std::string>> &pz : myMap ) {
    // print ...
}

和类似的东西,但它们不起作用。

std::map::value_type 定义为 std::map 元素的类型,即 std::pair<const Key, T>(即这里的 std::pair<const std::string, vector<std::string>>)。您应该将其用作

for ( std::map<std::string, vector<std::string>>::value_type &pz : myMap ) {
    //                                          ^^^^^^^^^^^^
    // print ...
}

songyuanyao 已经回答了你的问题。 这里需要澄清的一件事是 std::map 被定义为

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

class 名称应为 std::map<key type, value type>