NSSet与unordered_set

时间:2013-08-11 20:44:51

标签: c++ objective-c performance cocoa stl

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

P.S。测试是搜索随机字符串(NSString使用NSSetbasic_string<unichar>使用unordered_set

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

1 个答案:

答案 0 :(得分:1)

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

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

编辑:

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

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