如何创建一个循环来获取std :: map的内容

Lio*_*ing -2 c++ iterator stl stdmap

我需要使用关联数组,当听说STL std::map我决定使用它时,我有以下代码.

map<string, string> aArray;
aArray["First"] = "William";
aArray["Second"] = "James";
aArray["Third"] = "Michael";
aArray["Forth"] = "Jayden";
aArray["Fifth"] = "Ashley";

for(std::map<string, string>::iterator it=aArray.begin();it!=aArray.end();++it){
    cout << it << endl;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何制作有效的循环.
我在其他教程中看到过如下:

cout << it->first << endl;
cout << it->second << endl;
Run Code Online (Sandbox Code Playgroud)

但也有指定的任何成员first,second.

还有一个错误:

  • no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'std::map<std::basic_string<char>, std::basic_string<char> >::iterator {aka std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, std::basic_string<char> > >}')

请向我解释我该怎么做?

qua*_*dev 6

1)A std::string不是char*(并且字符串文字也不char*是),将地图声明更改为:

map<string, string> aArray;

2)您需要取消引用迭代器才能访问该对:

for(std::map<string, string>::iterator it=aArray.begin();it!=aArray.end();++it){
    cout << it->first << endl;
    cout << it->second << endl;
}
Run Code Online (Sandbox Code Playgroud)

要么 :

for(std::map<string, string>::iterator it=aArray.begin();it!=aArray.end();++it){
    cout << (*it).first << endl;
    cout << (*it).second << endl;
}
Run Code Online (Sandbox Code Playgroud)

或者更简单,在c ++ 11中你可以使用for-range循环:

for(auto&& pair : aArray){
    cout << pair.first << endl;
    cout << pair.second << endl;
}
Run Code Online (Sandbox Code Playgroud)