STL之交集 並集 差集

2021-06-24 18:21:51 字數 3385 閱讀 3512

stl對集合操作有標準的演算法,有沒有用過呢?使用它們的時候有需要注意什麼?例子程式?如果沒接觸過,請看這裡的簡單介紹:交集set_intersection、並集set_union、差集set_difference、對稱差集set_symeetric_difference。 

針對這裡提及的四個集合運算必須特別注意:

1、第乙個演算法需保證第一集合和第二集合有序,並從小到大排序,內部使用預設「<」操作符比較元素大小;

2、第二個演算法需保證第一集合和第二集合有序,排序方式參照compare確定,內部使用compare比較元素大小。

1 -- set_intersection(交集)

template outputiterator set_intersection(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result);

template outputiterator set_intersection(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result, compare comp);

該函式用於求兩個集合的交集,結果集合中包含所有同時屬於第乙個集合和第二個集合的元素。例如:集合和的交集為。

函式返回值:結果集合的結束位置迭代器。

引數:第乙個集合的開始位置,第乙個集合的結束位置,第二個引數的開始位置,第二個引數的結束位置,結果集合的插入迭代器。對於第二個演算法,compare指定用於比較元素大小的仿函式。

2 -- set_union(並集)

template outputiterator set_union(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result);

template outputiterator set_union(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result, compare comp);

該函式用於求兩個集合的交集,結果集合中包含所有同時屬於第乙個集合和第二個集合的元素。例如:集合和的並集為。

3 -- set_difference(差集)

template outputiterator set_difference(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result);

template outputiterator set_difference(inputiterator1 first1, inputiterator1 last1,

inputiterator2 first2, inputiterator2 last2,

outputiterator result, compare comp)

該函式用於求兩個集合的差集,結果集合中包含所有屬於第乙個集合但不屬於第二個集合的元素。例如:集合和的差集為。

4 -- set_symeetric_difference(對稱差集)

templateoutputiterator set_symmetric_difference(inputiterator1 first1,

inputiterator1 last1,

inputiterator2 first2,

inputiterator2 last2,

outputiterator result);

template

outputiterator set_symmetric_difference(inputiterator1 first1,

inputiterator1 last1,

inputiterator2 first2,

inputiterator2 last2,

outputiterator result, compare comp);

數學上,兩個集合的對稱差集是只屬於其中乙個集合,而不屬於另乙個集合的元素組成的集合。也就是說對稱差集是去除同時出現在兩個集合中的元素後,兩集合其他元素組成的集合。例如:集合和的對稱差為。集合論中的這個運算相當於布林邏輯中的異或運算。集合a和b的對稱差通常表示為aδb。

5 -- 交集、合集、差集、對稱差集使用方法

#include 

#include

template

void print_vector(const std::string & s_name, const std::vector & vec)

int main()

;std::vector v_less_1(a, a + 5);

int b = ;

std::vector v_less_2(b, b + 4);

std::vector vr_less;

std::set_intersection(v_less_1.begin(), v_less_1.end(), v_less_2.begin(), v_less_2.end(),

std::insert_iterator(v_less, v_less.begin()));

print_vector("v_less", v_less);

std::vector vr_less;

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::insert_iterator(v_less, v_less.begin()), std::less());

print_vector("v_less", v_less);

std::vector v_greater;

std::set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), std::insert_iterator(v_greater, v_greater.begin()), std::greater());

print_vector("v_greater", v_greater);

return 0;

}

STL演算法 交集,並集,差集,對稱差

學數學時我們知道人集合的概念,所謂集合就是符合某個條件的一堆元素.針對它們做的最多的操作就是求交集,並集,差集,對稱差集.不過集合有個特性就是不能有重複的元素.而stl中的演算法中的交並集,所用到的容器不一定要是不能有重複元素.並集等的結果是排好序的乙個集合.預設是通過 來比較.所以按照預設操作 容...

STL演算法 交集,並集,差集,對稱差

學數學時我們知道人集合的概念,所謂集合就是符合某個條件的一堆元素.針對它們做的最多的操作就是求交集,並集,差集,對稱差集.不過集合有個特性就是不能有重複的元素.而stl中的演算法中的交並集,所用到的容器不一定要是不能有重複元素.並集等的結果是排好序的乙個集合.預設是通過 來比較.所以按照預設操作 容...

交集並集差集

1 內連線 select from student a inner join sc b on a.sno b.sno 左連線 select from student a left join sc b on a.sno b.sno 差集 select sno from student except s...