在下面的示例中,我想访问employeeID
从课堂上Employee
通过使用指针employeePayroll:
class Employee { ... int employeeID; ... }
std::map<std::string, Employee *> *_employeePayroll;
std::map<std::string, Employee *> _employeeID;
_employeePayroll = &_employeeID;
如何使用给定密钥访问employeeID,例如打印内容?
... (*_employeePayroll)["Karl"]->employeeID ...
注意:这可行,但很危险!一旦“Karl”键不存在,程序就会崩溃。请找到下面最后一个代码示例。
安全的方法,使用find and an iterator:
...
itEmployeeID = _employeePayroll->find("Karl");
if ( itEmployeeID != _employeePayroll->end() )
{
... (itEmployeeID->second)->employeeID ...
完整的测试代码在这里:
#include <iostream>
#include <string>
#include <map>
class Employee
{
public:
int employeeID;
Employee()
{
employeeID = 123;
}
};
int main(int argc, char* argv[]) {
std::map<std::string, Employee *> *_employeePayroll;
std::map<std::string, Employee *> _employeeID;
std::map<std::string, Employee *>::const_iterator itEmployeeID;
_employeePayroll = &_employeeID;
(*_employeePayroll)["Karl"] = new Employee;
itEmployeeID = _employeePayroll->find("Karl");
if ( itEmployeeID != _employeePayroll->end() )
{
std::cout << (itEmployeeID->second)->employeeID;
std::cout << std::endl;
}
return 0;
}
注意:必须清理分配的内存。
“危险”变种的完整测试代码为:
#include <iostream>
#include <string>
#include <map>
class Employee
{
public:
int employeeID;
Employee()
{
employeeID = 123;
}
};
int main(int argc, char* argv[]) {
std::map<std::string, Employee *> *_employeePayroll;
std::map<std::string, Employee *> _employeeID;
_employeePayroll = &_employeeID;
int iValue;
(*_employeePayroll)["Karl"] = new Employee;
iValue = (*_employeePayroll)["Karl"]->employeeID;
std::cout << iValue;
std::cout << std::endl;
return 0;
}
注意:必须清理分配的内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)