1

NSSet我对 Cocoa与 STL 的性能进行了简单的随机测试unordered_set。两者都是使用哈希表实现的。由于 C++ 以其高性能代码而闻名,我惊讶地发现它NSSetunordered_set. 任何人都可以解释为什么会这样吗?

PS 测试是搜索随机字符串(使用NSStringforNSSetbasic_string<unichar>for unordered_set)。

编辑:这是代码:https ://github.com/fumoboy007/StringCollectionSpeedTest 。

4

1 回答 1

1

启用优化并享受 C++ 容器的“速度”有多快:循环为零纳秒,已被编译器优化掉!你不是在这里喃喃自语:“别惹我!” 编译器比你想象的要聪明。;)

因此,首先要欺骗编译器:重构您的测试,以便循环生成结果,并且该结果必须取决于每次迭代中的操作(例如对计数求和)。该结果也必须在某处使用,例如将其打印到控制台。否则编译器将再次检测到您不需要该结果,因此根本不需要执行循环。

编辑:

测试结果(在我的系统上):

事实证明 NSSet 和 std::unordered_set 在查找时间上大致相等。

于 2013-08-11T21:35:14.933 回答