diff --git a/algorithm/set_union.md b/algorithm/set_union.md new file mode 100644 index 00000000..b9fb0fc8 --- /dev/null +++ b/algorithm/set_union.md @@ -0,0 +1,32 @@ +# set_union + +**Description** : Constructs a sorted range beginning in the location passed by result with the set union of the two sorted ranges `[first1, last1)` and `[first2, last2)`. + +**Example**: +```cpp + std::vector v1 {3, 1, 5}; + std::vector v2 {1, 0}; + + // the destination needs to fit all merged values, we'll prune the extra elements later + std::vector destination(v1.size() + v2.size()); + + // set_union requires sorted ranges + std::sort(v1.begin(), v1.end()); + std::sort(v2.begin(), v2.end()); + + // returns iterator to the end of the constructed range + auto it = std::set_union(v1.begin(), v1.end(), // first range + v2.begin(), v2.end(), // second range + destination.begin()); + + // prune extra values + destination.resize(it - destination.begin()); + + // destination is now {0, 1, 3, 5} + for (auto value : destination) { + std::cout << value << " "; + } + +``` +**[See Sample code](snippets/algorithm/set_union.cpp)** +**[Run Code](https://rextester.com/LFXB93097)** \ No newline at end of file diff --git a/snippets/algorithm/set_union.cpp b/snippets/algorithm/set_union.cpp new file mode 100644 index 00000000..9ac269af --- /dev/null +++ b/snippets/algorithm/set_union.cpp @@ -0,0 +1,37 @@ + /* + Author : Thamara Andrade + Date : Date format 02/09/2019 + Time : Time format 02:00 + Description : Checks if a range is included in another range. +*/ + +#include +#include +#include + +int main() +{ + std::vector v1 {3, 1, 5}; + std::vector v2 {1, 0}; + + // the destination needs to fit all merged values, we'll prune the extra elements later + std::vector destination(v1.size() + v2.size()); + + // set_union requires sorted ranges + std::sort(v1.begin(), v1.end()); + std::sort(v2.begin(), v2.end()); + + // returns iterator to the end of the constructed range + auto it = std::set_union(v1.begin(), v1.end(), // first range + v2.begin(), v2.end(), // second range + destination.begin()); + + // prune extra values + destination.resize(it - destination.begin()); + + // destination is now {0, 1, 3, 5} + for (auto value : destination) { + std::cout << value << " "; + } + return 0; +} \ No newline at end of file