gpt4 book ai didi

c++ - 使用 char* 作为 std::map 中的键

转载 作者:IT老高 更新时间:2023-10-28 12:06:22 25 4
gpt4 key购买 nike

我试图弄清楚为什么以下代码不起作用,并且我假设这是使用 char* 作为键类型的问题,但是我不确定如何解决它或它为什么会发生。我使用的所有其他函数(在 HL2 SDK 中)都使用 char* 所以使用 std::string 会导致很多不必要的复杂化。

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;
}

最佳答案

您需要为映射提供一个比较仿函数,否则它会比较指针,而不是它指向的以空字符结尾的字符串。通常,只要您希望 map 键成为指针,就会出现这种情况。

例如:

struct cmp_str
{
bool operator()(char const *a, char const *b) const
{
return std::strcmp(a, b) < 0;
}
};

map<char *, int, cmp_str> BlahBlah;

关于c++ - 使用 char* 作为 std::map 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com