我已经阅读了各种文本。我唯一得到的是set是一个关联容器,由有序和唯一键组成。现在,如果没有要使用键映射的值,那么集合中的关联在哪里。
答案 0 :(得分:4)
Container是一个对象,用于存储其他对象,并负责管理其包含的对象所使用的内存。
AssociativeContainer是一个有序的容器,可以根据键快速查找对象。
std::set是一个关联容器,包含一组排序为Key
的唯一对象那是什么让它联想起来?事件中集合中的元素由其键引用,而不是由它们在容器中的绝对位置引用。当然,关键是元素本身。将其视为一个地图,其中键值等于和,因为相同内容的副本被删除。
那么无序的套装呢? std :: unordered_set满足Container,AllocatorAwareContainer和 UnorderedAssociativeContainer
的要求答案 1 :(得分:1)
有许多不同的方式来思考它,其中一些通常会导致典型的鸡或蛋困境。
以std::map
为例,它的接口规范是一个简单的关联容器。然而,您可以将(并实现)std::map
视为std::set
对key:data
,比较器函数仅考虑存储元素的key
部分并忽略{ {1}}部分。从这个角度来看,"设置" (data
或std::set
)可以被视为比#34; map"更通用,更基础的数据结构。 (std::unordered_set
或std::map
)。即" set"的功能涵盖了存储std::unordered_map
对的典型关联容器的功能。换句话说,"设置"是一个关联容器之父,仅仅因为这个原因,它可以被认为是一个关联容器本身。
当然,人们可以争辩说,人们可以使用"地图"轻松实现" set" (通过使用与key:data
和key
相同的值),意味着" map"可以被视为比" set"更基本的数据结构。这是我之前提到的鸡蛋或鸡蛋情况。
答案 2 :(得分:0)
如果您认为集合本身就是一个独立的数据结构,那么它就不适合关联数据结构的定义,因为没有映射值。但是,当一个集合被认为是地图的特殊情况时,映射的("关联的")值与该键相同,它适合称为关联容器。请注意,地图被视为主要数据结构而非集合,因为可以使用地图来实现集合,但反之亦然。
答案 3 :(得分:0)
我们可以假设有两种类型的容器,一种是链接列表,另一种是关联容器。我们可以通过键来选择任何关联容器的值,例如,在一个简单的数组中,您可以通过其位置来选择任何值,即 arr [position] = value 。在这里,位置是关键。但是,您不能对链接列表执行此操作。