无法遍历作为列表的哈希图的值

时间:2019-06-04 18:07:00

标签: c++ hashmap iteration

我正在尝试编写一个非常简单而平淡的程序,其中提示用户输入三种动物的名字和三个维度(身高,体重和年龄)。我想将其存储为{{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;
}

1 个答案:

答案 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是对映射中元素的(常量)引用。