Unordered_map vs vector +针对少量元素的自定义散列
unordered_map vs vector + custom hashing for small number of elements
目前我有一个嵌套的hashmap。内部映射键有很大的范围,但外部映射键只有10个不同的可能字符串。
unordered_map<string, unordered_map<int, list<string>>> nestedHashMap;
切换到
会更有效率吗?vector<unordered_map<int, list<string>>>
并有自己的哈希函数
static int hashFunc(string stringToBeHashed){
switch(stringToBeHashed){
case "example1":
return 0;
.
.
.
case "example10":
return 9;
default:
return -1;
}
}
和做我自己的哈希之前每次查找?就空间复杂性而言,由于unordered_map是一个基于节点的容器,我认为这种向量方法将为我节省unordered_map所需的每个节点的内存。此外,我假设内部哈希映射将保证最快的检索,即使键是int。键有一个很大的范围,所以我不认为在这里使用向量会提高性能。对吧?任何评论/提示将不胜感激。
这里内存不是问题。
内部映射键的范围非常大
这就是为什么hashmap在这里是一个正确的选择
但是外部映射键只有10个可能的字符串
你就误用了hashmap。
用树(std::map
)代替。
(是的,如果你想自己写一个查找函数,你可以选择std::vector
)
BTW,当你只有10个元素时,你不应该关心空间复杂性的话题:)更新:
外部容器的目的基本上是存储10个元素。
这是一个很小的数字,所以理论上你可以选择任何
你想要的容器(数组,树,哈希表)。
所以你应该选择最合适的。
选择是:
-
std::map
:最少代码编写,自动排序元素 -
std::vector
:最好利用空间,但你应该自己写一个查找函数 -
std::hashmap
:从大炮里射进麻雀。你不需要它提供的99%的功能。此容器与您的容器用途不同
如果有人想知道,用
做一个快速的代码分析。vector<unordered_map<int, list<string>>
map<string, unordered_map<int, list<string>>
unordered_map<string, vector<unordered_map<int, list<string>>
vector的平均时间最快,其次是unordered_map,最后是map。
相关文章:
- 如何绘制自定义形状的元素?
- 从自定义类获取对象向量中的 max 元素
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 从自定义数据类型向量中删除重复元素
- 如何在不使用 vector::erase() 的情况下编写自定义 Vector 方法来删除元素?
- C++ - 按自定义数据类型向量的值删除元素
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 使用自定义比较器C++映射,不插入所有元素
- 通过Overloading Operator []访问自定义数组包装器中的元素
- 尝试自定义一个函数来对不同种类元素的向量进行排序
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 定义将函数调用到传递的元素的自定义迭代器
- 如何使用完全自定义的GUI元素来自定义操作系统设计
- 通过与不同类型的值进行自定义比较来查找 std::set 的元素
- 设置要与无序集合一起使用的自定义类 - 在集合中找不到元素
- 自定义容器在保留空间时不必要地创建新元素实例
- 如何在 c++ 中从文件创建自定义 QML 元素
- 如何比较/排序包含自定义 typedef 的列表容器的元素
- 具有元素自定义构造函数的对象数组/向量
- 当矢量至少有1个元素时,自定义对象的std::find_if返回错误的迭代器