Algorithms on sets in STL

數學概念

集合set,是一個無序不重複元素集, 可用於消除重複元素。
支持union(並), intersection(交), difference(差)和sysmmetric difference(對稱差集)等數學運算。程序員

伊始

STL提供了上面這些經常使用的數學運算算法,C++程序員應該熟練掌握它們,但它們也只是咱們處理集合算法的冰山一角,下面咱們對它們展開介紹。算法

並集 union

union.png

std::set_union(A.begin(), A.end(),
               B.begin(), B.end(),
               std::back_inserter(results));

交集 intersection

intersection.png

std::set_intersection(A.begin(), A.end(),
                      B.begin(), B.end(),
                      std::back_inserter(results));

補集 includes

includes.png

bool UincludesA = std::includes(begin(U), end(U), begin(A), end(A));

差集 difference

difference.png

std::set_difference(A.begin(), A.end(),
                    B.begin(), B.end(),
                    std::back_inserter(results));

對稱差集 sysmmetric difference

sysmmetric difference.png

std::set_symmetric_difference(A.begin(), A.end(),
                              B.begin(), B.end(),
                              std::back_inserter(results));

Important

須要注意的是,前面全部的算法都要求輸入的數據是排序好的。spa

  • 實際上,這些算法是基於對輸入數據已經排序的事情假設,若是並不是如此,則最終的結果都是錯的;
  • 正是因爲這些假設,算法是複雜度是O(n),而不是O(nlogn)
相關文章
相關標籤/搜索