2017-01-12 6 views
0

J'apprends le C++ et j'ai essayé de créer une carte non-ordonnée de PlayerInfo, ceci parce que je peux l'utiliser comme mémoire dynamique. Je suis arrivé à ce stade et j'essaie d'approfondir mes connaissances et de les utiliser dans mon projet actuel.Enregistrer la position de unordered_map

Pour ce faire, je veux une fonction qui dit GetPlayerPointer (int playerid); et ce que je veux faire c'est retourner la position dans la liste donc un morceau de code pour rendre ceci ... bien plus clair.

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

Cela me permettra alors de faire quelque chose comme

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

Je vise atleast quelque chose le long de ces lignes.

Je suis vraiment désolé de demander, et merci pour votre aide.

code actuel:

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

Postez le code actuel. –

+1

Voulez-vous renvoyer un pointeur vers un lecteur ('Player *')? – qxz

+0

Également envisager d'obtenir un [bon livre C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – qxz

Répondre

1

référence de retour, mais vous devez vérifier si l'objet est sur la carte et faire quelque chose si ce n'est pas:

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; 

ou vous pouvez retourner un pointeur et cas de lecteur non trouvé retour nullptr mais l'appelant devra vérifier:

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

Merci, Slava! Grande aide et vous m'a même appris quelque chose le tutoriel jamais :). – Tom