我可以使用 std::map 值动态更改结构体的成员变量吗?

问题描述 投票:0回答:1

有一个结构体,其中有一个 const char* 作为成员变量。

typedef struct WWCryptoAuthorizationHeader
{
    int age;
    const char *name;
    const char *address;
} StudentInfo;

我可以使用 std::map 值动态更改结构体的成员变量吗?

我试试这个..

void foo(StudentInfo *studentInfo, const char* key)
{
    std::map<std::string, const char*> studentInfoMap;
    
    studentInfoMap.insert(std::make_pair("name", studentInfo->name));
    studentInfoMap.insert(std::make_pair("address", studentInfo->address));

    for(auto &item : studentInfoMap)
    {
       if (strcmp(key, item.first.c_str()) == 0)
       {
          item.second = "John";
       }
    }
}

你能帮我吗?

c++ c stdmap
1个回答
0
投票

您将 char* 指针的

copy
存储在
map
中,因此您无法更新
StudentInfo
结构中的原始指针。 您必须使用额外的间接级别,如下所示:

void foo(StudentInfo *studentInfo, const char* key)
{
    std::map<std::string, const char**> studentInfoMap;
    
    studentInfoMap.insert(std::make_pair("name", &(studentInfo->name)));
    studentInfoMap.insert(std::make_pair("address", &(studentInfo->address)));

    for(auto &item : studentInfoMap)
    {
       if (strcmp(key, item.first.c_str()) == 0)
       {
          *(item.second) = "John";
       }
    }
}

话虽如此,

for
循环是不必要的:

void foo(StudentInfo *studentInfo, const char* key)
{
    std::map<std::string, const char**> studentInfoMap;
    
    studentInfoMap.insert(std::make_pair("name", &(studentInfo->name)));
    studentInfoMap.insert(std::make_pair("address", &(studentInfo->address)));

    *(studentInfoMap[key]) = "John";
    // or
    *(studentInfoMap.at(key)) = "John";
}
© www.soinside.com 2019 - 2024. All rights reserved.