什么是C++中的“set”?他们什么时候有用?
如果您在理解套件时一般不会感觉不好。大多数数学学位都花在即将与集合论方面:
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集合是关联映射,保证集合中元素的排序和唯一性(Multisets保证前者而不是后者)。
它们通常用作集合操作的一部分 - 诸如工会,交叉点以及涉及包含/排除集合中元素的其他交互。
一组是不同 对象的集合,在 其本身视为一个对象。集是 数学中最基本的概念之一 。虽然它在19世纪末被发明为 ,但现在理论是 数学中普遍存在的一部分,并且可以用作基础,从中可以导出几乎所有的数学。
STL set
是a red-black tree(至少这是我怎么想它的实现)
看它的另一种方式。
因此,性能,快速的元素的搜索,排序元素,元素的独特性,有序横向等等。
当您想要跟踪唯一元素(例如唯一字符串或整数列表)时,它非常有用,但您也可以存储更复杂的结构。
它们是什么?
一组是一个集合。
一组就像是一个字典或键/值对的'映射',除了它只存储(是一组键)而没有相关联的值。
一组任一或不包含每个可能的密钥值的一个实例。例如,一组整数可能包含值{0,1,5}。一个值(例如5)不能在集合中被多次包含(如果你对一个给定的键值多次调用集合的插入方法,集合仍然只包含该键值的一个实例)。
它们的用法?
我几乎不会像地图一样频繁地使用它们。
有一次我用一组是,如果我这就给远三分球这一个客户端使用作为手柄库。我将保留一个包含我创建的所有有效句柄值的私有集合。当客户端给我一个句柄时,我会通过测试该值是否包含在我的集合中来测试句柄是否为有效句柄。
让我感到困惑的设置代码正是像跟踪手柄一样使用它们。 – 2009-09-08 02:04:29
http://www.google.com/search?q=c%2B%2B+sets – Aziz 2009-09-07 22:50:47
是的感谢。我甚至阅读了关于集合的维基百科文章,但是我发现的所有定义都是关于“抽象数据结构”和“有限集合”的定义。我想我只是希望得到一个“傻瓜式”简单的英文解释......所以我想我不能因为暗示我愚蠢而不是真正的帮助而责怪你。 – 2009-09-07 22:59:51
@Monte,如果我以任何方式冒犯了你,我表示歉意。我只是建议搜索谷歌,因为有很多文章解释有关的概念。 – Aziz 2009-09-07 23:32:29