在unordered_map中搜索的最佳实践

Best practices for searching in unordered_map

本文关键字:最佳 搜索 unordered map      更新时间:2023-10-16

我想创建一个 std::unordered_map < int, std::string >std::unordered_map< std::string, int >。在此地图中,我将存储字符串及其整数表示。我将仅在代码(硬编码对)中填写此地图。

我需要将输入字符串转换为其int值 - 在地图中找到。因此,我只需要在运行时在地图中搜索即可。在这一点上,我在转换时需要最好的性能。在最好的情况下-O(1)。

我的问题:

  1. 我应该使用字符串作为键还是int?
  2. 我应该定义自己的哈希功能吗?
  3. 两种情况下的最佳性能找到功能是钥匙对的字符串/int/string?

std::mapstd::unordered_map或其multi -CounterParts均构建相同 - 它们将键(第一个模板参数)映射到一个值(第二个模板参数)。如果要获取O(1)(未排序)或O(log(n))(MAP)行为,则需要定义为要获得值的数据类型的键。

当您想找到给定字符串的积分值时,在您的情况下进行的方法是std::unordered_map<std::string, int>

一个反示例将在错误代码中查找名称,通常您会在函数(或放置在errno中)返回的特定错误代码,并希望获得e的字符串值。G。用于打印错误。然后您将拥有std::unordered_map<int, std::string>(前提

编辑:

定义自己的哈希功能是Konstantin在评论-STD :: String提供自己的Hash代码功能中提到的那种过早优化,该功能适合大多数用例。只有当您发现自己的哈希速度太慢时,请尝试找到一种更快的方法。

由于您的所有字符串都是硬编码的,因此您可能想看看完美的哈希,e。G。在gperf变体中。