基于地图自动循环的单元素访问C ++

ccc*_*nrc 5 c++ dictionary stdmap auto c++11

我试图理解除了auto循环之外的“理论”

std :: map

C ++中的元素。我有std::map一个std::stringKEY和一个vector<std:string>作为价值。我可以通过以下方式访问其元素:

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

至于vector<string>元素上的循环,我知道我可以放“ auto”而不是“ std :: string”。但是在这种情况下,地图的等效值是多少?我经过研究和搜索,在那篇文章中发现每个地图元素都以

map <K,V> :: value_type

但是我怎么写下来呢?我试过了:

for ( std::map<std::string, vector<std::string>> &pz : myMap ) {
    // print ...
}
Run Code Online (Sandbox Code Playgroud)

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

son*_*yao 8

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 ...
}
Run Code Online (Sandbox Code Playgroud)

  • @cccnrc这有点令人困惑,因为映射包含_key-value_对,但是'value_type'不是存储的_values_的类型,而是整个条目(键-值对)的类型。值的类型拼写为“ mapped_type”。 (2认同)