2017-01-12 45 views
0

我正在學習C++,我試過製作PlayerInfo的unordered_map,這是因爲我可以使用它作爲動態內存。我已經到了這個階段,我正在努力提高自己的知識,並在我的實際項目中使用它。unordered_map的存儲位置

要做到這一點,我想要一個函數說GetPlayerPointer(int playerid);而我想要做的就是返回列表中的位置,以便讓代碼更清晰。

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

這就會讓我像做

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

我ATLEAST瞄準東西沿着這些路線。

我真的很抱歉問,並感謝您的幫助。

實際代碼:

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)); 
+0

發佈實際的代碼。 –

+1

你想返回一個指向玩家的指針('Player *')嗎? – qxz

+0

也考慮得到[良好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – qxz

回答

1

迴歸基準,但你必須檢查的對象是在地圖上做一些事情,如果它是不是:

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; 
+0

謝謝,光榮!很大的幫助,你甚至教過我一些教程從來沒有:)。 – Tom