我需要使用关联数组,当听说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> > >}')
请向我解释我该怎么做?
答案 0 :(得分:6)
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;
}