如果我有两段代码:
1#:
map<unsigned int, unsigned short> ConnectedIPs;
PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerConnect(int playerid)
{
PlayerLoopList.push_back(playerid);
char szIP[32];
GetPlayerIp(playerid,szIP);
unsigned short explodeIP[4];
sscanf(szIP, " %d[^.].%d[^.].%d[^.].%d", &explodeIP[0], &explodeIP[1], &explodeIP[2], &explodeIP[3]);
g_PlayerIP[playerid] = (explodeIP[0] + (explodeIP[1] << 8) + (explodeIP[2] << 16) + (explodeIP[3] << 24));
ConnectedIPs[g_PlayerIP[playerid]] += 1;
if(ConnectedIPs[g_PlayerIP[playerid]] >= g_max_ip)
{
Report(playerid,CHECK_IPFLOOD);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
2#:
map<char*, unsigned short> ConnectedIPs;//edited from char to char*
PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerConnect(int playerid)
{
PlayerLoopList.push_back(playerid);
char szIP[32];
GetPlayerIp(playerid,szIP);
ConnectedIPs[szIP] += 1;
if(ConnectedIPs[szIP] >= g_max_ip)
{
Report(playerid,CHECK_IPFLOOD);
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
2#会更快吗?此代码用于计算一个ip连接的播放器数量.我想我做得对,或者我不是?
Dan*_*lKO 10
我假设你的意思map<string, unsigned short>是第二种情况,否则它甚至不会编译.
两者都基于密钥的比较在地图中触发O(log n)查找.比较32位整数通常比比较字符串更快,因此第一种情况应该更快.
我不担心,除非有分析数据显示这对性能有重大影响.如果你只在玩家连接时这样做,并且会话往往持续"足够长",那么这可能是一个无关紧要的优化 - 即使这样,切换到unordered_map可能比改变密钥类型更重要.
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |