我对Cocoa NSSet
与STL unordered_set
的表现进行了简单的随机测试。两者都使用哈希表实现。由于C ++以其高性能代码而闻名,我惊讶地发现NSSet
比unordered_set
快1.5倍。谁能解释为什么会这样?
P.S。测试是搜索随机字符串(NSString
使用NSSet
,basic_string<unichar>
使用unordered_set
。
编辑:这是代码:https://github.com/fumoboy007/StringCollectionSpeedTest。
答案 0 :(得分:1)
启用优化并享受“快速”C ++容器的方式:循环零纳秒,已被编译器优化掉!难道你没有在这里喃喃自语:“别惹我!”编译器比你想象的更聪明。 ;)
因此,首先欺骗编译器:重构测试,以便循环生成结果,并且结果必须依赖于每次迭代中的操作(例如,对计数求和) 。必须在某处使用该结果,例如将其打印到控制台。否则,编译器将再次检测到您不需要该结果,因此根本不需要执行循环。
编辑:
测试结果(在我的系统上):
事实证明,NSSet和std :: unordered_set在查找时间大致相等。