c++ - unordered_map 的存储位置

标签 c++ unordered-map

我正在学习 C++,并且尝试制作 PlayerInfo 的 unordered_map,这是因为我可以将其用作动态内存。我已经到了这个阶段,我正在尝试进一步扩展我的知识并将其用于我的实际项目中。

要做到这一点,我需要一个函数 GetPlayerPointer(int playerid);我想要它做的是返回列表中的位置,这样一段代码就可以使它...更清楚。

??? GetPlayerPointer(int playerid)
{
     auto point = BasicPlayerInfo.find(playerid);
     return point->second;
}

然后这将允许我做类似的事情

Player = GetPlayerPointer(playerid);
Player.Score = 10;

我至少在朝着这些方向努力。

非常抱歉询问,感谢您的帮助。

实际代码:

struct pBasicInfo
{
    bool IsLoggedIn         = false;
    bool Spawned            = false;
    int AdminLevel          = 0;
    std::string PlayerName;
};
extern std::unordered_map<int, pBasicInfo> BasicPlayerInfo;

//CreatePlayer
        pBasicInfo SetupPlayer;
        SetupPlayer.IsLoggedIn = true;
        SetupPlayer.Spawned = false;
        SetupPlayer.PlayerName = GetName(playerid);
        BasicPlayerInfo.insert(std::pair<int, pBasicInfo>(playerid, SetupPlayer));

最佳答案

返回引用,但你必须检查对象是否在 map 中,如果不在则做一些事情:

pBasicInfo &GetPlayer(int playerid)
{
     auto point = BasicPlayerInfo.find(playerid);
     if( point == BasicPlayerInfo.end() )
         throw std::runtime_error( "player not found" );
     return point->second;
}

auto &player = GetPlayer( 123 );
player.Score = 10;

或者您可以返回指针,如果找不到播放器,则返回 nullptr 但调用者必须检查:

pBasicInfo *GetPlayerPointer(int playerid)
{
     auto point = BasicPlayerInfo.find(playerid);
     if( point == BasicPlayerInfo.end() )
         return nullptr;
     return &point->second;
}


auto player = GetPlayerPointer( 123 );
if( player ) player->Score = 10;

关于c++ - unordered_map 的存储位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622588/

相关文章:

c++ - 关于c++中的关键字 “const”

c++ - 在循环中重置循环

C++ 无序映射

c++ - Windows 和 Linux 上 std::unordered_map 容器的不同行为

c++ - 如何从 uint8_t 数组中提取不同大小的值?

c++ - g++ 与手动优化复数乘法

c++ - 排序函数给出大量输入 0 的浮点异常

c++ - 静态成员未更新

c++ - 调试时检查 map 的内容

c++ - std::unordered_map 使用 Visual C++ 2008 的未声明标识符