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

时间:2015-01-01 15:07:17

标签: c++ stl iterator 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;
}

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

cout << it->first << endl;
cout << it->second << endl;

但是,没有任何名为firstsecond的成员。

还有一个错误:

  • 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 个答案:

答案 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;
}