我已经尝试过搜索但没找到任何东西。
我正在学习STL容器,并了解顺序容器和关联容器的优缺点,但是我不确定为什么有人会更喜欢无关容器而不是关联容器,因为它肯定不会影响元素的插入,查找和删除。
它纯粹是一个性能的东西,即它需要更多的处理来插入/删除一个关联容器,因为它必须经过排序? 我不太了解系统方面的事情,但在我的脑海里,我觉得无序的容器需要比自动组织的更加“保养”。
如果有人能够解决一些问题,我将非常感激。
我已经尝试过搜索但没找到任何东西。
我正在学习STL容器,并了解顺序容器和关联容器的优缺点,但是我不确定为什么有人会更喜欢无关容器而不是关联容器,因为它肯定不会影响元素的插入,查找和删除。
它纯粹是一个性能的东西,即它需要更多的处理来插入/删除一个关联容器,因为它必须经过排序? 我不太了解系统方面的事情,但在我的脑海里,我觉得无序的容器需要比自动组织的更加“保养”。
如果有人能够解决一些问题,我将非常感激。
纯粹抽象地考虑这样一个事实,即元素的排序是一个额外的“功能”,你必须付出代价,所以如果你不需要它(比如在查找字典中),那么你不应该付钱为了它。
从技术上讲,这意味着可以通过使用哈希表来实现无序容器,其具有预期的查找和插入复杂度O(1),而不是有序容器的O(log n)。
然而,在切线相关的说明中,有一个巨大的 实际的 使用字符串作为键时的优点:有序容器必须在树行走的每个地方执行完整的字符串比较,而散列容器只执行单个散列操作(甚至可以“优化”以仅从非常采样固定数量的字符长串),在实践中经常变得更快。
如果订购不是必需的,那么最好的办法是尝试 都 容器类型(其界面几乎相同)并比较其中的性能 你的 使用情况。
不确定为什么有人会更喜欢无序容器而非关联容器
这些功能并不是唯一的。容器可以是关联的,如果是,则也可以是无序的。
如果你熟悉的话 哈希映射,这就是无序容器利用的技术。 标准库使用术语“无序”而不是“散列”,以便在需要的时候不强加特定的技术只是特定的性能承诺。 (见评论)
我们使用无序容器当对象的排序没有必要时你最关心对象查找的性能,因为无序容器在任何地方都有最快的搜索/插入是O(1)而不是有序容器(关联容器取O(log n))和Sequence容器取O(n))。