我正在尝试编写一个非常简单而平淡的程序,其中提示用户输入三种动物的名字和三个维度(身高,体重和年龄)。我想将其存储为{{animal“:{height,weight,age}}形式的Hashmap。
当我尝试遍历键值(动物名)时,它可以工作,但是问题在于遍历键。问题使我发疯,因为我不了解诸如迭代器重载之类的概念,在其他文章中我将其视为必须修改代码的一种方式,以便它可以迭代每个键中的第二个值我的哈希图。
这是我的代码:
#include <iostream>
#include <string>
#include <map>
#include <list>
using namespace std;
int main(){
map <string, list<float>> measurements;
for(int i=1; i<=3; i++){
string name;
float height, weight, age;
cout << "Please enter the animals' name: " << i << endl;
cin >> name;
cout << "Enter the height, weight, age" << endl;
cin >> height >> weight >> age;
measurements[name] = {height, weight, age};
}
for (auto x: measurements) {
cout << x.first << endl;
cout << x.second << endl;
}
return 0;
}
答案 0 :(得分:3)
operator<<
没有输出运算符(std::list
),就像std::map
没有输出运算符一样。用与迭代地图相同的方法,可以迭代列表:
for (const auto& x: measurements) {
std::cout << x.first << "\n";
for (const auto& y : x.second) {
std::cout << y << "\n";
}
}
我将auto
替换为const auto&
,因为仅在auto
的情况下,类型被推导为值类型,然后x
是元素中的元素的副本。地图。可以使用const auto&
来避免此副本,那么x
是对映射中元素的(常量)引用。