Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么std::set是一个关联容器_C++_Stl - Fatal编程技术网

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

C++ 为什么std::set是一个关联容器,c++,stl,C++,Stl,我看过各种各样的课文。我得到的唯一一件事是集合是一个由排序键和唯一键组成的关联容器。现在,如果没有可使用键映射的值,那么关联在集合中的位置是什么。有许多不同的方法来考虑它,其中一些方法通常会导致典型的鸡或蛋困境 以std::map为例,根据其接口规范,它是一个简单的关联容器。然而,您可以将std::map看作(并实现)成对key:data的std::set,比较器函数只考虑存储元素的key部分,而忽略data部分。从这个角度来看,“set”(std::set或std::unordered_set

我看过各种各样的课文。我得到的唯一一件事是集合是一个由排序键和唯一键组成的关联容器。现在,如果没有可使用键映射的值,那么关联在集合中的位置是什么。

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

std::map
为例,根据其接口规范,它是一个简单的关联容器。然而,您可以将
std::map
看作(并实现)成对
key:data
std::set
,比较器函数只考虑存储元素的
key
部分,而忽略
data
部分。从这个角度来看,“set”(
std::set
std::unordered_set
)可以被视为比“map”(
std::map
std::unordered_map
)更通用、更基本的数据结构。也就是说,“set”的功能包括存储
key:data
对的典型关联容器的功能。换句话说,“set”是关联容器之父,仅出于这个原因,就可以将其视为关联容器本身

当然,有人会争辩说,可以使用“映射”轻松实现“集”(通过使用与
key
data
相同的值),这意味着“映射”可以被视为比“集”更基本的数据结构。这就是我之前提到的鸡或蛋的情况。

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

是一个有序容器,它提供基于键的对象快速查找

是一个关联容器,其中包含一组已排序的键类型的唯一对象

那么是什么使它具有关联性呢?集合中的元素由其键引用,而不是由其在容器中的绝对位置引用。当然,关键是元素本身。可以将其视为一个映射,其中键是相等的值,并且鉴于此,消除了相同内容的重复副本

那么无序的一组呢?
STD::unOrdEdSt集合满足容器、ApLoalTraceAcess容器和<强>不关联关联符>/P>>P>的要求,如果您认为集合本身是独立的数据结构,则不适合关联数据结构的定义,因为没有映射值。然而,当一个集合被认为是映射的一个特例,映射的(“关联的”)值与键相同时,它适合被称为关联容器。请注意,与集合相比,映射更像是一种主要数据结构,因为可以使用映射来实现集合,但反之亦然。

我们可以假设有两种类型的容器,一种是链表容器,另一种是关联容器。我们可以通过键拾取任何关联容器的值,例如,在一个简单数组中,您可以通过其位置拾取任何值,即arr[position]=value。在这里,位置是关键。但是,对于链表,你不能这样做。

有趣的问题,我以前从来没有这样想过。集合中的哪些条目与??我想它们自己存在。也许对于
集合
,键和值是相同的?@PaulMcKenzie你不喜欢
void
?我喜欢认为“关联”是在容器元素和它的值之间。相反,在序列容器中,元素是通过它们的插入顺序来标识的。@Kerrek SB这就是我的想法……在内部,它被存储为一个平衡的BST,需要logn时间来搜索……所以我猜它只是列表的BST表示,只是为了得到set和map的lognLookup时间的搜索时间是对数的,这让我们推断它是一个树结构。无序等价物的查找时间是常数,这让我们推断它是一个哈希表。所以,是的,map和set之间的区别在于值是键还是提供键和值。