STL Set 交集 合集 差集

2021-06-23 04:48:08 字數 2213 閱讀 7691

set是關聯容器。其鍵值就是實值,實值就是鍵值,不可以有重複,所以我們不能通過set的迭代器來改變set的元素的值,set擁有和list相同的特性:當對他進行插入和刪除操作的時候,操作之前的迭代器依然有效。當然刪除了的那個就沒效了。set的底層結構是rb-tree,所以是有序的。

stl中特別提供了一種針對set的操作的演算法:交集set_intersection,並集set_union,差集set_difference。對稱差集set_symeetric_difference,這些演算法稍後會講到。

一:set模板類的宣告。

template <

classkey

classtraits

=less>,

classallocator

=allocator>

>

class set。

其中個引數的意義如下:

key:要放入set裡的資料型別,可以是任何型別的資料。

traits:這是乙個仿函式(關於仿函式是什麼,我後面的文章會講到)。提供了具有比較功能的仿函式,來覺得元素在set裡的排列的順序,這是乙個可選的引數,預設的是std::less,如果要自己提供這個引數,那麼必須要遵循此規則:具有兩個引數,返回型別為bool。

allocator:空間配置器,這個引數是可選的,預設的是std::allocator.

二:set裡的基本操作

我們可以通過下面的方法來例項化乙個set物件

std::sets;那個s這個物件裡面存貯的元素是從小到大排序的,(因為用std::less作為比較工具。)

如果要想在s裡面插入資料,可以用inset函式(set沒用過載操作,因為set本生的值和索引是相同的)

s.insert(3);s.insert(5).....

因為set是集合,那麼集合本身就要求是唯一性,所以如果要像set裡面插入資料和以前的資料有重合,那麼插入不成功。

可以通過下面的方法來遍歷set裡面的元素

std::set::iterator it = s.begin();

while(it!=s.end())

這是個模板函式,從上面的演算法可以看出,傳進去的兩個容器必須是有序的。_dest指向輸出的容器,這個容器必須是預先分配好空間的,否則會出錯的,返回值指向儲存結果的容器的尾端的下乙個位置。eg.

set_union() :求兩個集合的並集,引數要求同上。

std::set_difference():差集

set_symmetric_difference():得到的結果是第乙個迭代器相對於第二個的差集並上第二個相當於第乙個的差集。**:

struct compare

///自定義乙個仿函式

求交集,返回值指向str最後乙個元素的尾端

cout<<"result of set_intersection s1,s2:"first = str;

while(firstend = std::set_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//

s2相對於s1的差集

while(firstend = std::set_difference(s2.begin(),s2.end(),s.begin(),s.end(),str,compare());//

s1相對於s2的差集

while(firstend = std::set_symmetric_difference(s.begin(),s.end(),s2.begin(),s2.end(),str,compare());//

上面兩個差集的並集

while(first

sets3   ;   

set::iterator   iter   =   s3.begin()   ;   

set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),inserter(s3,iter));   

copy(s3.begin(),s3.end(),   ostream_iterator(cout,"   "));

java 集合 差集 交集 合集 retain

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!listla new arraylist listlb new arraylist la.retainall lb 交集 差集 合集 system.out.println la system.out.println lb 三段 的執行結果分別如下 ...

oracle中的交集 差集以及合集

今天在看oracle查詢的時候重新溫習了一下oracle中的三種集合。交集,intersect 兩個查詢集合共有的部分,一般用於既有什麼又有什麼的關係。當然,在實際查詢中,交集功能的體現也可以通過where字句用and實現。合集,union和union all 兩個集合的所有內容。但在這裡,unio...

python 集合比較(交集 並集,差集)

python的set和其他語言類似,是乙個無序不重複元素集,基本功能包括關係測試和消除重複元素.集合物件還支援union 聯合 intersection 交 difference 差 和sysmmetric difference 對稱差集 等數 算.sets 支援 x in set,len set ...