为什么std :: set是一个关联容器

时间:2014-08-01 00:59:13

标签: c++ stl

我已经阅读了各种文本。我唯一得到的是set是一个关联容器,由有序和唯一键组成。现在,如果没有要使用键映射的值,那么集合中的关联在哪里。

4 个答案:

答案 0 :(得分:4)

Container是一个对象,用于存储其他对象,并负责管理其包含的对象所使用的内存。

AssociativeContainer是一个有序的容器,可以根据键快速查找对象。

std::set是一个关联容器,包含一组排序为Key

的唯一对象

那是什么让它联想起来?事件中集合中的元素由其键引用,而不是由它们在容器中的绝对位置引用。当然,关键是元素本身。将其视为一个地图,其中键值等于,因为相同内容的副本被删除。

那么无序的套装呢? std :: unordered_set满足Container,AllocatorAwareContainer和 UnorderedAssociativeContainer

的要求

答案 1 :(得分:1)

有许多不同的方式来思考它,其中一些通常会导致典型的鸡或蛋困境。

std::map为例,它的接口规范是一个简单的关联容器。然而,您可以将(并实现)std::map视为std::setkey:data,比较器函数仅考虑存储元素的key部分并忽略{ {1}}部分。从这个角度来看,"设置" (datastd::set)可以被视为比#34; map"更通用,更基础的数据结构。 (std::unordered_setstd::map)。即" set"的功能涵盖了存储std::unordered_map对的典型关联容器的功能。换句话说,"设置"是一个关联容器之父,仅仅因为这个原因,它可以被认为是一个关联容器本身。

当然,人们可以争辩说,人们可以使用"地图"轻松实现" set" (通过使用与key:datakey相同的值),意味着" map"可以被视为比" set"更基本的数据结构。这是我之前提到的鸡蛋或鸡蛋情况。

答案 2 :(得分:0)

如果您认为集合本身就是一个独立的数据结构,那么它就不适合关联数据结构的定义,因为没有映射值。但是,当一个集合被认为是地图的特殊情况时,映射的("关联的")值与该键相同,它适合称为关联容器。请注意,地图被视为主要数据结构而非集合,因为可以使用地图来实现集合,但反之亦然。

答案 3 :(得分:0)

我们可以假设有两种类型的容器,一种是链接列表,另一种是关联容器。我们可以通过键来选择任何关联容器的值,例如,在一个简单的数组中,您可以通过其位置来选择任何值,即 arr [position] = value 。在这里,位置是关键。但是,您不能对链接列表执行此操作。