我有一个很难概念化C ++设置,实际上是设置一般。
这些是什么? 他们如何有用吗?
我有一个很难概念化C ++设置,实际上是设置一般。
这些是什么? 他们如何有用吗?
如果您有一般很难理解集不心疼。 大多数数学学位都花在即将与集合论方面:
http://en.wikipedia.org/wiki/Set_theory
想想一套独特,无序对象的集合。 在许多方面,它看起来像一个列表:
{1,2,3,4}
但顺序并不重要:
{4,3,2,1} = {1,2,3,4}
和重复被忽略:
{1,1,2,3,4} = {1,2,3,4}
A C ++集是这个数学对象的实现,与奇数特征是在内部排序。 但是,这仅仅是一个实施的细节,并且不与理解数据结构。 排序仅仅是速度。
C ++ STL集是保证组(多重集保证前者而非后者)内的元件的两个分拣和唯一关联的映射。
它们通常作为设定操作的一部分 - 比如工会,路口和其他交互涉及一组中的元素包含/排除。
“设置”是一种集合的存储数倍,但唯一对象。 当你想收集的对象,但你不关心它们的顺序或多少次相同的对象是在它是有用的。
更多细节请参阅本: 坐落在C ++
设置 “一般”是数学(非常基本的)的概念。
STL的set
是基于集合的数学概念:它是唯一成员的集合,或“唯一关联容器”的STL术语。 在一个略显奇怪的是,它各种因素(在数学组,没有“秩序”的元素)。
有些STL实现还支持hash_set
,这是非常相似的set
,因为它也是一个模拟一组的数学概念。 集之间的差异很大hash_set
是hash_sets 没有自己的元素进行排序,它们具有不同的性能特点(O(1)而不是O(log n)的查找窗口,假设一个好的哈希函数),当然他们不是活得T标准。
这些是什么?
一组是一个集合。
一组是象字典或键/值对的“地图”,但它仅存储(是的集合),而不相关的值的密钥。
一组任一或不包含每个可能的密钥值的一个实例。 例如,一组整数可能包含的值{0,1,5}。 值(例如5)不能含有比设定一次(如果调用集的插入方法不止一次给定键值,设置仍将包含键值只有一个实例)。
他们如何有用吗?
我不几乎一样经常使用他们作为地图。
有一次我用一组是,如果我这就给远三分球这一个客户端使用作为手柄库。 我会继续它包含了所有我已经创造了有效的句柄值的私订。 当客户端给我一个把手,我将测试手柄是否通过测试该值是否包含在我的一套有效的句柄。
引用维基百科:
一组是不同对象的集合,视为自己的权利的对象。 集是数学中最基本的概念之一。 虽然它在19世纪末发明,集合论是现在的数学无处不在的一部分,可以作为从几乎所有的数学可以得出一个基础。
STL set
是一个红黑树 (至少这是我怎么想它的实现)
另一种方式来看待它。
因此,性能,快速的元素的搜索,排序元素,元素的独特性,有序横向等等。
当你想跟踪例如像唯一的字符串或整数列表的独特元素,但你可以存储更多的复杂结构,以及它是有用的。
对于C ++无序执行套,退房Boost.Unordered 。 在许多情况下,这比STL集合,我个人或多或少仅使用逐步建立排序列表这是更好的选择。