unordered_map 的存储位置
Storing Position of unordered_map
我正在学习 C++,我尝试制作 unordered_map PlayerInfo,这是因为我可以将其用作动态内存。我已经到了这个阶段,我正在尝试进一步扩展我的知识并在我的实际项目中使用它。
要做到这一点,我需要一个函数 GetPlayerPointer(int playerid);我想要它做的是 return 列表中的位置,所以一段代码可以使它...更清楚。
??? 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));
return参考,但你必须检查对象是否在地图中,如果不在则做一些事情:
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;
或者您可以 return 指针,如果找不到玩家 return 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 PlayerInfo,这是因为我可以将其用作动态内存。我已经到了这个阶段,我正在尝试进一步扩展我的知识并在我的实际项目中使用它。
要做到这一点,我需要一个函数 GetPlayerPointer(int playerid);我想要它做的是 return 列表中的位置,所以一段代码可以使它...更清楚。
??? 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));
return参考,但你必须检查对象是否在地图中,如果不在则做一些事情:
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;
或者您可以 return 指针,如果找不到玩家 return 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;