13

为什么std::set定义为关联容器?

我的意思std::map是一个关联容器,因为它将一个值映射到一个键,但为什么它是一个集合?

4

2 回答 2

5

23.4.6.1 类模板集概述[set.overview]

Aset满足 [..] 关联容器 (23.2.4) [...] 的所有要求

因为它满足作为关联容器的所有先决条件,这些先决条件在“将键映射到值”中进行了描述23.2.4.并且并不像“将键映射到值”那么简单。

第二段甚至强调了这一点(或者更确切地说,强调它实际上是map并且multimap比关联容器具有额外的功能):

23.2.4 关联容器 [associative.reqmts]

2) 每个关联容器在 Key 和一个排序关系 Compare 上参数化,该排序关系对 Key 的元素产生严格的弱排序 (25.4)。此外,map 和 multimap 将任意类型 T 与 Key 相关联。Compare 类型的对象称为容器的比较对象。

整个段落太大,无法在此处复制。

于 2013-04-02T10:09:05.443 回答
2

参考 cplusplus.com

在集合中,键是值,它必须是唯一的。

编辑:

“关联容器中的元素是通过它们的键而不是它们在容器中的绝对位置来引用的。”

于 2013-04-02T10:04:21.680 回答