unordered_set与set的区别
unordered_set与set都是c++STL中两个重要容器,unordered_set是C++11标准的时候推出的新容器,unordered_set与set使用上几乎没有什么区别,其内部的成员函数也大差不差.
它们的主要区别在于内部实现的数据结构不同,set的内部实现是一个红黑树的平衡二叉树,但unordered_set其内部的实现是一个哈希表,两者结构大不相同,因此它们所呈现出的插入,查找,删除效率以及元素的储存排列顺序也都有不同.
set存储的元素是有序的,在遍历set时,里面的元素会默认按从小到大的顺序排序,且其的插入,删除和查找的时间复杂度都是对数级的,比较均匀.
其结果为:
可见插入的顺序是不会影响set最终存储元素的顺序的.另一方面对于unordered_set来说其在一般情况下其查找效率是要高于set的,其查找和删除等的操作的世间复杂度是常数级的,但是在级少数情况下set的可能要高于unordered_set(比如冲突较多的情况下).同时unordered_set由于其内部是用哈希表实现的,所以其内部存储的元素之间是没有什么逻辑顺序,这与set刚好反过来的,在实际的应用中我们可以根据是否要求数据之间的有序性来使用set或者unordered_set.
还有一点要注意的是unordered_set在数据量较小的时候可能也会表现出一种有序性,比如:
其结果为:
但若数据量大时哈希表进行扩充,那么其顺序就不确定了,比如:
其结果为:
所以千万要记住unorder_set其内部元素存储是无序的(unordered这个词也是无序的意思),不要给误导了!!!
CSDN-Ada助手: 恭喜您写了这篇题为“二分搜索法的详细讲解和易错点”的博客!阅读您的文章,我对二分搜索法有了更深入的了解。您详细解释了该算法的原理和应用,并指出了易错点,这对于初学者来说非常有帮助。 不过,我想提供一个建议,希望能帮助您进一步提升文章的质量。您可以考虑在文章中添加一些实际的应用案例,以便读者更好地理解和记忆该算法。此外,您可以进一步探讨一些可能的优化方法,这将使您的博客更加丰富和有深度。 再次感谢您的分享,期待您在未来的创作中继续取得进步! CSDN 正在通过评论红包奖励优秀博客,请看红包流:https://bbs.csdn.net/?type=4&header=0&utm_source=csdn_ai_ada_blog_reply3
CSDN-Ada助手: 恭喜你写了第10篇博客!翻转二叉树是一个很有意思的话题,你的解释也非常清晰易懂。不过我觉得你可以考虑在下一篇博客中加入一些实际应用的例子,让读者更容易理解这个概念。期待你的下一篇作品!
CSDN-Ada助手: 恭喜博主能够坚持不懈地分享技术知识,这篇关于栈与队列的博客内容很有深度,对我们理解数据结构有很大帮助。不过,我觉得下一步可以考虑结合一些实际案例或者应用场景来讲解栈与队列的使用,这样更能让读者有身临其境的感觉。希望博主能够继续保持创作热情,为我们带来更多有价值的内容。
CSDN-Ada助手: 恭喜您写了第6篇博客!标题为“哈希表常用数据结构---set”,看起来很有深度和实用性。您的博客内容一直都很有价值,感谢您不断创作并分享给大家。 在下一步的创作中,我建议您可以探索一下哈希表与其他数据结构的关系,比如与数组、链表等的结合应用,以及它们在不同场景下的性能比较和优劣势分析。这样的深入研究会进一步丰富您的博客内容,并为读者提供更多有用的信息。 期待您的下一篇博客,继续保持谦虚的态度,您的努力一定会得到更多读者的认可与支持!
CSDN-Ada助手: 恭喜作者写了这么有意义的一篇博客!对于C++常见字符串问题的探讨确实能帮助读者更好地理解和应用相关知识。希望作者能继续保持创作,分享更多关于C++的经验和技巧。也希望下一篇博客能够更进一步,可以介绍一些更深入的字符串问题或者与其他C++主题的结合,让读者们更全面地学习和掌握相关知识。期待作者继续努力!