如何创建循环以获取 std::map 的内容
How can I create a loop to get the contents of std::map
我需要使用关联数组,当听说 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;
}
但我不知道如何进行有效循环。
我在其他教程中看到如下内容:
cout << it->first << endl;
cout << it->second << endl;
但是没有任何名为 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> > >}')
请向我解释一下我该怎么做?
1) 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;
}
或:
for(std::map<string, string>::iterator it=aArray.begin();it!=aArray.end();++it){
cout << (*it).first << endl;
cout << (*it).second << endl;
}
或者更简单,在 c++11 中你可以只使用一个 for-range 循环:
for(auto&& pair : aArray){
cout << pair.first << endl;
cout << pair.second << endl;
}
我需要使用关联数组,当听说 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;
}
但我不知道如何进行有效循环。
我在其他教程中看到如下内容:
cout << it->first << endl;
cout << it->second << endl;
但是没有任何名为 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> > >}')
请向我解释一下我该怎么做?
1) 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;
}
或:
for(std::map<string, string>::iterator it=aArray.begin();it!=aArray.end();++it){
cout << (*it).first << endl;
cout << (*it).second << endl;
}
或者更简单,在 c++11 中你可以只使用一个 for-range 循环:
for(auto&& pair : aArray){
cout << pair.first << endl;
cout << pair.second << endl;
}