- 主题:C++的map慢的令人发指,尤其比C#慢的太多太多
我在百亿级别上用过std的unordered_map,你可能需要自定义allocator。
--
FROM 73.162.73.*
楼主这个测试程序比较特别,就是只插入,没有删除。
这种allocator可以取巧,比如只reserve一个buffer,一直在尾部增长。
你的alloator可否一观?
【 在 wesleyzeng 的大作中提到: 】
: C++ 没有开启 O2 等优化吧。
: 我这里不优化 C++:
: 插入: 11.3169s
: ...................
--
FROM 73.162.73.*
我其实之前也私下试了一下,大概插入是1.08s,比你的慢,所以没有post出来。
我的allocator如下,里面有个hash_wrapper:
https://raw.githubusercontent.com/etorth/mir2x/master/common/src/scopedalloc.hpp
的确unordered_map就是比较慢,楼主骂的有理。
P0429估计能赶上c++23末班车,到时候这种test可能会有更好的实现。
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0429r7.pdf
【 在 wesleyzeng 的大作中提到: 】
: 分配器实现确实取巧了,只是想说明C++ 优化性能能接近性能的物理极限,不至于比 C# 慢。
: 将先前一个通用的分配器改成了一个单增分配的一次性分配全部内存的分配器。如果将分配器改成通用的,性能估计没有这个效果好。但是 HashMap 还可以优化 Hash 函数等提升性能。因此即使用较通用的分配器性能会下降点,但是可以通过优化 Hash 函数等再提升点。
: 见笑了,贴3个图(另外查询里的实现,也做些小幅改动。避免重复查询)。
: ...................
--
FROM 73.162.73.*