【发布时间】:2018-10-28 03:27:33
【问题描述】:
看看这个有趣的演讲:
CppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
他在 38:32 左右提到
void Benchmark_Slow(int iters) {
std::unordered_map<string, int> m;
std::pair<const string, int> p = {};
while (iters--) m.insert(p)
}
比以下变体慢约 2 倍
void Benchmark_Fast(int iters) {
std::unordered_map<string, int> m;
const std::pair<const string, int> p = {};
while (iters--) m.insert(p)
}
我还在思考为什么会选择&&重载(1)。
std::pair<iterator,bool> insert( value_type&& value ); (1)std::pair<iterator,bool> insert( const value_type& value ); (3)
其中value_type是std::pair<const Key, T>。
毕竟,我们并没有移动值,所以在我的理解中,表达式p 应该是左值而不是 x/prvalue,对吗?有人可以启发我吗?
【问题讨论】:
-
_const_在这种情况下的别名是什么?只是const? -
@Xirema 我假设它是 OP 试图将 markdown 放入代码块中的别名。如果我错了就恢复。
标签: c++ stl stdmap value-categories