c++ - 需要将字符串存储为某些快速数据结构中的对象的 id

标签 c++ c algorithm hash dictionary

我正在为网络服务器实现 session 存储。键是字符串 存储的对象是指针。我尝试使用 map 但需要一些东西 快点。我会查找一个物体 5-20 次 与插入一样频繁。

我尝试使用 HashMap 但失败了。我觉得我受到的限制多于空闲时间。

我正在 Linux 下编写 c/c++ 代码。 我不想致力于提升,因为我的网络服务器将比提升更长久。 :)

这是一个高度相关的问题,因为硬件(SSD 磁盘)是 变化迅速。什么是正确的解决方案,两年后就不再是正确的解决方案。

最佳答案

我本来打算建议一张 map ,但我发现你已经排除了这一点。

I tried using map but need something faster.

这些是 std::map 性能界限,由 Wikipedia page 提供。 :

  • 搜索元素需要 O(log n) 时间
  • 插入新元素需要 O(log n) 时间
  • 递增/递减迭代器需要 O(log n) 时间
  • 迭代映射的每个元素需要 O(n) 时间
  • 删除单个 map 元素需要 O(log n) 时间
  • 复制整个 map 需要 O(n log n) 时间。

您如何衡量并确定 map 没有为您充分优化?您看到的任何瓶颈很可能都在代码的其他部分,而 map 就完全足够了。

上述界限似乎符合除最严格的可扩展性要求之外的所有要求。

关于c++ - 需要将字符串存储为某些快速数据结构中的对象的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/838290/

相关文章:

algorithm - 如何检查大十进制数是否可以除以 2^x 或 5^x

c - C 中的 Arraylist 在重新分配时失败

更改使用 malloc 创建的指针的地址

algorithm - 加密成本高但解密成本低

c# - 调用 COM 组件返回错误 HRESULT E_FAIL

c - 在C中实现链表时出现段错误

java - 插入二叉搜索树问题

c++ - 如何在没有未覆盖区域的情况下绘制 CEdit 控件?

c++ - 为什么在不相关的 #define 语句上包含 <windows.h> 会导致 "error: expected ' )' before numeric constant"

c++ - reinterpret_cast<char*>(p) 或 static_cast<char*>((void*)p)) 用于字节指针差异,哪个更好?