2013-10-26 63 views
0

所以基本上我正在用一个简单的员工类来玩,这个类是假设将一个名称映射到一个唯一的ID号。现在就是这件事。我想创建一个不带参数的成员函数,但返回名称和员工ID的映射。我希望呼叫是直观的,例如。 employee.map_this() // returns a map成员函数C++初学者

class Employee 
{ 
public: 
    Employee() = default; 
    Employee(const string& pname); 
    Employee& operator=(const Employee&) = delete; 
    Employee(const Employee&) = delete; 

private: 
    const string name; 
    static int ID_no; 
    const string employee_ID; 
    map<const string, const string> map_this(); 
}; 

int Employee::ID_no = 0001; 

Employee::Employee(const string& pname) : name(pname), employee_ID(to_string(ID_no)) 
{ 
    ID_no++; 
} 

map<const string, const string> Employee::map_this() 
{ 
    //  How do I do this???? 
} 
+3

你想返回['的std :: pair' ](http://en.cppreference.com/w/cpp/utility/pair)或['std :: map'](http://en.cppreference.com/w/cpp/container/map)?地图不会在这里过度杀伤?地图通常用于管理多个对象的类,而这是您希望在单个函数调用中返回的按对象数据。 – legends2k

+0

地图数据成员在哪里? – 0x499602D2

+0

@ 0x499602D2:无论是他想要映射还是配对,无论是否有相应的数据成员,都可以即时创建。 – legends2k

回答

0

std::map是不是你认为它是。当您想要将所有员工Id编号映射到其各自的Employee对象时,将使用映射。

如果你想返回两个值作为一个对象,那么我建议你使用std::pair

std::pair<const std::string, const std::string> Test::getNameAndId() { 
    return {name, employee_ID}; 
} 

然后你就可以存取权限在std::pair这样的名称和ID:

Employee employee{"Carl"}; 
auto& p = employee.getNameAndId(); 
std::cout << "Name: " << p.first << ", Id: " << p.second << std::endl; 

输出:

Name: Carl, Id: 1