11 Kasım 2010, PERŞEMBE
Std bir anahtar olarak char* kullanarak::göster
Ben anlamaya çalışıyorum neden aşağıdaki kod çalışmıyor, ve ben olduğunu düşünüyorum bir sorun ile kullanarak char* anahtar türü, ancak emin değilim nasıl yapabilirim çözmek ya da neden meydana gelmesidir. Ben (HL2 SDK) std::string
char*
kullanım tüm diğer işlevleri gereksiz zorluklar bir sürü neden oluyor.
std::map<char*, int> g_PlayerNames;
int PlayerManager::CreateFakePlayer()
{
FakePlayer *player = new FakePlayer();
int index = g_FakePlayers.AddToTail(player);
bool foundName = false;
// Iterate through Player Names and find an Unused one
for(std::map<char*,int>::iterator it = g_PlayerNames.begin(); it != g_PlayerNames.end(); it)
{
if(it->second == NAME_AVAILABLE)
{
// We found an Available Name. Mark as Unavailable and move it to the end of the list
foundName = true;
g_FakePlayers.Element(index)->name = it->first;
g_PlayerNames.insert(std::pair<char*, int>(it->first, NAME_UNAVAILABLE));
g_PlayerNames.erase(it); // Remove name since we added it to the end of the list
break;
}
}
// If we can't find a usable name, just user 'player'
if(!foundName)
{
g_FakePlayers.Element(index)->name = "player";
}
g_FakePlayers.Element(index)->connectTime = time(NULL);
g_FakePlayers.Element(index)->score = 0;
return index;
}
CEVAP
11 Kasım 2010, PERŞEMBE
Karşılaştırma char* pointer dize karşılaştırma harita aksi functor vermek gerekir. Genel olarak, bu bir işaretçi olarak göster anahtarı istediğin zaman böyledir.
yani.
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
map<char *, int, cmp_str> BlahBlah;
Not: Aslında benim düzenleme dikkate almayın, eşleme kullanımı daha kolay. EDİT:
Bunu Paylaş:
Nasıl yabancı anahtar kısıtlamaları ge...
NSUserDefaults için anahtar olarak sab...
HashMap anahtar olarak bir bayt dizisi...
Kullanarak basit bir web sunucusu olar...
Nasıl kolayca yatay olarak ortala <...