【发布时间】:2014-04-21 07:53:46
【问题描述】:
我有一个管理游戏用户的 C++ 服务器。这些用户具有唯一的 AccountID,几乎每次在服务器上查找用户都涉及从
的全局映射中查找用户std::map<unsigned int, User*>
其中 unsigned int 是 AccountID。这很好用,除了我正在实施朋友列表的这个新案例。为了将朋友添加到某人的朋友列表中,需要通过用户名完成。当通过用户名邀请人们参加聊天室或其他“聚会”类型的活动时,我也遇到了这个问题。
我目前的两个选择是:
1) 遍历整个用户映射,按用户名进行字符串比较。
2) 对索引的 Username 列进行数据库查找并返回 AccountID,然后为 User* 进行映射查找。
这两种解决方案都非常低效。我正在寻找一种更优化的按用户名查找用户的解决方案。
想到的第一个想法是对用户名进行哈希处理的哈希表,但是我有两个不同的数据结构(哈希表和地图)做同样的事情,除了一个是按 AccountID 的,一个是按名称的.
第二种选择可能是使用用户名作为地图的键,尽管我无法想象使用字符串作为键的效率太高。
对我应该在这里做什么有什么建议吗?至于服务器上的一些更多信息,大约有 1000+ 用户,他们会不断地离开和加入。
【问题讨论】: