1
4
只是想详细说明一下已经说过的话。 分类容器
不变性在这里非常重要:
然而,由于不可变性,正如您怀疑的那样,还有其他候选者,尤其是像数组一样的容器。它们在这里有一些优势:
这里有几个“随机访问容器”:
因此,你真正需要做的事情只有两个步骤:
由于缓存位置的原因,即使渐进行为相似,搜索实际上也会更快。
如果你不想重新发明轮子,你也可以检查亚历山德里斯科的
未分类的容器
实际上,如果你真的不在乎订单,而且你的收藏量很大,那么
这可以很好地工作…除非您面临一个以某种方式导致大量冲突的集合,否则未排序的容器将在线性时间内搜索给定哈希的“冲突”列表。 结论
试一试
排序的
不幸的是,我们不能在那里提供更多帮助,因为它在很大程度上取决于数据集的大小及其元素的重新划分。 |
2
4
如果数据在有序的随机访问容器中(例如
|
3
3
使用A sort 预计起飞时间 std::vector 并使用 std::binary_search 搜索它。 您的其他选项将是HASHMAP(不在C++标准中) 然而 但还有其他选择,例如 SGI's hash_map 和 boost::unordered_map ) std::map . 如果你从不添加到你的集合中,使用二进制搜索的排序向量很可能比地图有更好的性能。 |
4
2
我建议使用std::vector<int>来存储它们,并使用std::binary_search或std::lower_bound来检索它们。 std::unordered_set和std::set都会增加大量的内存开销-即使unordered_set提供O(1)查找,O(logn)二进制搜索可能会优于它,因为数据是连续存储的(没有指针跟随,更少的页面错误等),并且您不需要计算哈希函数。 |
5
1
如果您已经有一个有序的数组或
或者,可以使用某种哈希,例如
看什么都没有意义
所以,问题是n的近似值,以及您打算探测表的次数。如果您不想检查许多值以查看它们是否在提供的ints中,那么设置时间非常重要,并且
因此,如果要比较的整数的数量相当小,或者探针值的数量很小,则使用二进制搜索。如果int的数目很大,探测的数目也很大,那么使用哈希表。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |