在std :: map中使用char *作为键 [英] Using char* as a key in std::map
问题描述
我想弄清楚为什么下面的代码不工作,我假设这是一个问题,使用char *作为键类型,但我不知道如何可以解决它或为什么它发生。我使用的所有其他函数(在HL2 SDK中)使用 char *
,因此使用 std :: string
导致很多不必要的并发症。
I am trying to figure out why the following code is not working, and I am assuming it is an issue with using char* as the key type, however I am not sure how I can resolve it or why it is occuring. All of the other functions I use (in the HL2 SDK) use char*
so using std::string
is going to cause a lot of unnecessary complications.
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;
}
推荐答案
函数到地图,否则比较char *指针而不是字符串。一般来说,这是任何时候你想要你的地图键是一个指针的情况。
You need to give a comparison functor to the map otherwise it's comparing the char* pointer not the string. In general, this is the case anytime you want your map key to be a pointer.
即
struct cmp_str
{
bool operator()(char const *a, char const *b)
{
return std::strcmp(a, b) < 0;
}
};
map<char *, int, cmp_str> BlahBlah;
编辑:完全忽略我的编辑,函数更容易使用。
Acutally disregard my edit, the functor is easier to use.
这篇关于在std :: map中使用char *作为键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!