2010-11-22 61 views
5

我需要使用的德尔福套的优势,如“在” C++中的设置,如数据结构,但我不知道是否有像++套在C什么是C++

我的数据结构知道我可以用一个数组来代替,但正如我所说的,我想使用像“in”这样的set优势,那么是否有像C++中的set一样的内置数据结构?

如果是,请解释如何使用它,我还是在C++

首发。如果没有,有没有办法来表示它(exept阵列,因为我知道它)。

在此先感谢:)

+4

[`std :: set`](http://www.sgi.com/tech/stl/set.html)是一个集合。你可以`#include `来获得它。 – birryree 2010-11-22 21:50:19

+1

“set”及其本地运算符(in,+, - ,*)是Pascal(和Delphi)特有的。 C++使用模板实现了类似的功能,但是它们缺乏Pascal实现的优雅(尽管现在Pascal集限于255个元素) – 2010-11-22 22:31:59

回答

10

有一个标准库容器调用std::set ...我不知道德尔福,但在一套简单的元素操作将通过使用find方法及end结果进行比较,来实现:

std::set<int> s; 
s.insert(5); 
if (s.find(5) != s.end()) { 
    // 5 is in the set 
} 

其他操作可以实现为标准库算法(std::unionstd::difference ...)

0

是的,有是一个C++ STL set容器类DES第65页。 Stroustrup的TC++ PL(Special Ed。)的491。

2

在C++中没有任何类似的集成。根据您的需要,您可能希望使用位标志和位操作或std::bitset标准容器(当然除了std :: set之外)。如果您使用的是C++ Builder,那么还有一个模拟Delphi设置的类 - 在System.hpp中搜索BaseSet或SetBase或类似的东西 - 我不记得确切的名称。

0

STL算法具有以下 From MSDN

set_difference 团结所有属于一个排序源范围中的元素,但不与第二排序源范围,成一个单一的,分类目标范围,其中排序标准可以由二元谓词来指定。

set_intersection 团结所有同时属于这两个排序源的元件的范围成一个单一的,分类目标范围,其中,所述排序标准可以由二进制谓词来指定。

set_symmetric_difference 团结所有属于一个元件,而不是两者的排序源范围成一个单一的,分类目标范围,其中,所述排序标准可以由二进制谓词来指定。

set_union 团结所有属于的两个排序源的至少一个元素的范围成一个单一的,分类目标范围,其中,所述排序标准可以由二进制谓词来指定。