c++ - 按名称快速查找用户

标签 c++ dictionary hashtable

我有一个管理游戏用户的 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/

相关文章:

c++ - 为什么输出首先显示文件 2?

java - 使用 void* 作为 Java 对象的 C++ 等价物

c++ - 仅存储一个 int 的指针的静态与动态分配

python - 解析空格分隔的命名字段

java - 交换过程中 native 内存不断增加

java - 如何将哈希表 Arraylist 获取到其他 Intent ?

c - 适本地存储线程特定变量

c++ - 序列化远程命令的好方法是什么?

c# - 如何在字典中查找重复的对?

c# - 使用 GetHashCode 方法扩展接口(interface),用作通用字典中的键 (C#)