我有一个管理游戏用户的 C++ 服务器。这些用户具有唯一的 AccountID,几乎每次在服务器上查找用户都涉及从
的全局 map 中查找用户std::map<unsigned int, User*>
其中 unsigned int 是 AccountID。这很好用,除了我正在实现 friend 列表的这个新案例。为了将 friend 添加到某人的 friend 列表中,需要通过用户名来完成。当通过用户名邀请人们加入聊天室或其他“聚会”类型的事件时,我也遇到了这个问题。
我目前的两个选择是:
1) 遍历整个用户映射,按用户名进行字符串比较。
2) 在索引的用户名列上进行数据库查找并返回 AccountID,然后为 User* 进行映射查找。
这两种解决方案都非常低效。我正在寻找通过用户名查找用户的更优化的解决方案。
我想到的第一个想法是在用户名上散列的哈希表,但后来我有两个不同的数据结构(哈希表和 map )做同样的事情,除了一个是通过 AccountID,一个是通过名称.
第二种选择是使用用户名作为 map 的键,尽管我无法想象使用字符串作为键会太有效。
关于我应该在这里做什么有什么建议吗?至于服务器上的一些更多信息,大约有 1000+ 用户,他们会不断地离开和加入。
最佳答案
C++11 有 std::unordered_map
它将自动为您处理散列,例如std::unordered_map<std::string, User*>
.
关于c++ - 按名称快速查找用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23193256/