c++ - 如何取消引用指向 C++ 中对象指针映射的指针?
问题描述
在下面的示例中,我想使用指针 employeePayroll 访问employeeID
from 类Employee
:
class Employee { ... int employeeID; ... }
std::map<std::string, Employee *> *_employeePayroll;
std::map<std::string, Employee *> _employeeID;
_employeePayroll = &_employeeID;
如何使用给定的密钥访问employeeID,例如打印内容?
解决方案
... (*_employeePayroll)["Karl"]->employeeID ...
注意:这可行,但很危险!一旦密钥“Karl”不存在,它就会使程序崩溃。请在下面找到最后一个代码示例。
使用find和迭代器的安全方法:
...
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;
}
注意:必须清理分配的内存。
推荐阅读
- c# - .NET Core 2.2:xUnit Theory Inlinedata 不适用于枚举值
- php - 在每个 foreach 中使用多个 foreach 插入仅在每个 foreach 中获取最终值
- regex - 用于在 MATLAB 中捕获科学数字的 RegEx
- c# - 如何将新数据成员添加到我的自定义复选框列表?
- sql-server - 如何让自动迁移与 SQL Server 一起工作
- javascript - 我如何显示我的登录用户下的他/她的订单列表?
- javascript - 如何修复 vue js 或 javascript 比较逻辑错误
- node.js - 我根本无法启动管理 SDK
- javascript - 如何将使用 id 的函数替换为类名
- android - react-native - 如何检测何时按下主页按钮?