c++ 当传递一个类给map时如何遍历map

cwtwac6a  于 2023-02-06  发布在  其他
关注(0)|答案(2)|浏览(152)

我正在写一个简单的代码,我已经从类Employee创建了两个对象,它们有两个方法:getData()和displayData(),我还做了一个Employee类型的Map,它接受输入,但通过调用类中的displayData()来迭代Map。
下面是代码。我得到了错误的错误:“struct std::pair〈const int,Employee〉"没有名为”displayData“的成员
有什么建议还是我做错了。

#include <iostream>
#include <map>

using namespace std;
class Employee {
    private:
       int id; 
       string name;
    public :
       void getData(){
          cin >> id >> name;
       }
    
       void displayData(){
          cout << id <<" "<<name<<endl;
       }
  };

int main() {

    map<int, Employee> m1;
    map<int, Employee> :: iterator it;
    Employee e1,e2;

    //for (i)
    e1.getData();
    m1[1] = e1;
    e2.getData();
    m1[2] = e2;

    for (it = m1.begin(); it!=m1.end(); ++it){
       cout << (*it).first.displayData() << (*it).second.displayData() <<endl;
    }

    return 0;

 }

先谢谢你的帮助

7d7tgy0s

7d7tgy0s1#

下面是代码。我得到了错误的错误:"struct std::pair〈const int,Employee〉"没有名为"displayData"的成员
编译器会告诉你错误的地方,你可能对std::maps有误解,std::maps包含一个键值对(More details About Maps),它是一个可以通过iterator访问的std::pair,或者是一个可以直接通过map[key]访问的值。iterator::first包含的键在你的代码中是一个int,而iterator::second包含的值在你现在的情况下是一个名为Employee的对象,因此(*it).first.displayData()错误。
此行也不正确,会产生编译器错误。

cout << (*it).first.displayData() << (*it).second.displayData() <<endl;

(*it).second.displayData()将返回函数的返回类型,因为这是一个函数调用,在本例中是一个类型void。您可以简单地像这样调用函数以在每次迭代中获得所需的结果。

std::cout << it->first << " ";
it->second.displayData();
  • 始终相信编译器错误。*
x4shl7ld

x4shl7ld2#

在C++ 17中,你可以使用结构化绑定来提高可读性:

for (auto [eid, employee] : m1)
{
    std::cout << eid << ": ";
    employee.displayData();
}

相关问题