C++ 如何在c+中取消对指向对象的指针映射的指针的引用+;?

C++ 如何在c+中取消对指向对象的指针映射的指针的引用+;?,c++,c++11,C++,C++11,在下面的示例中,我想使用employeePayroll指针从类Employee访问employeeID: class Employee { ... int employeeID; ... } std::map<std::string, Employee *> *_employeePayroll; std::map<std::string, Employee *> _employeeID; _employeePayroll = &_employeeID; clas

在下面的示例中,我想使用employeePayroll指针从类
Employee
访问
employeeID

class Employee { ... int employeeID; ... }
std::map<std::string, Employee *> *_employeePayroll;
std::map<std::string, Employee *> _employeeID;
_employeePayroll = &_employeeID;
class Employee{…int employeeID;..}
std::map*_员工工资单;
标准::地图(employeeID);
_employeePayroll=&u employeeID;
如何使用给定的密钥访问employeeID,例如打印内容

... (*_employeePayroll)["Karl"]->employeeID ...
注意:这是可行的,但很危险!一旦“Karl”键不存在,程序就会崩溃。请在下面找到最后一个代码示例



使用find和迭代器的安全方法:

完整的测试代码如下:

#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;
}
#包括
#包括
#包括
班级员工
{
公众:
国际雇员ID;
雇员()
{
employeeID=123;
}
};
int main(int argc,char*argv[]){
std::map*_员工工资单;
标准::地图(employeeID);
std::map::const_迭代器itEmployeeID;
_employeePayroll=&u employeeID;
(*_employeePayroll)[“Karl”]=新员工;
itEmployeeID=\u employeePayroll->find(“卡尔”);
如果(itEmployeeID!=\u employeePayroll->end())
{
std::cout second)->employeeID;
std::cout employeeID;

std::不可能复制我想你那里有一些编译错误。你打算找一个特定的员工来收集他们的id吗?没有
employeeID
成员
std::map
,所以
employeePayroll->employeeID
是胡说八道的。而
static\u cast\u employeeID
同样是胡说八道的。Iit缺少即使他们在那里,
employeeID
也不是指针类型,所以静态强制转换到
void*
仍然是胡说八道。从“快速问题”中删除“快速”,准确地说明你要做什么,你要做什么的条件,输入,预期的输出,等等,然后更新你的帖子。谢谢WhozCraig,我更改了它。一些输入错误并再次解释。类似于
(*_employeePayroll)[“name”]->employeeID
我想这就是你想要的,虽然很难真正知道。谢谢你Jorg!!!这个编码解释很有帮助。我会用安全的方式玩得更多。
#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;
}