diff --git a/snippets/cpp/array-manipulation/filter-vector.md b/snippets/cpp/vector-manipulation.md/filter.md similarity index 96% rename from snippets/cpp/array-manipulation/filter-vector.md rename to snippets/cpp/vector-manipulation.md/filter.md index 083f7899..0975969c 100644 --- a/snippets/cpp/array-manipulation/filter-vector.md +++ b/snippets/cpp/vector-manipulation.md/filter.md @@ -1,5 +1,5 @@ --- -Title: Filter Vector +Title: Filter Description: Filters a vector using a predicate function. Author: majvax Tags: array,filter,c++23 diff --git a/snippets/cpp/vector-manipulation.md/remove-duplicates.md b/snippets/cpp/vector-manipulation.md/remove-duplicates.md new file mode 100644 index 00000000..2691b9c3 --- /dev/null +++ b/snippets/cpp/vector-manipulation.md/remove-duplicates.md @@ -0,0 +1,29 @@ +--- +title: Remove duplicates +description: Removes duplicates from an vector of ints +author: AnkushRoy-code +tags: vector,remove,duplicate +contributor: majvax +--- + +```cpp +#include +#include + +bool removeDuplicates(std::vector &input) noexcept { + if (input.empty()) return false; + const auto size = input.size(); + std::sort(input.begin(), input.end()); + + auto last = std::unique(input.begin(), input.end()); // remove duplicates + input.erase(last, input.end()); // resize vector and delete the undefined elements + + return size != input.size(); +} + + + +// Usage: +std::vector vec = {4, 2, 2, 8, 5, 6, 9, 9, 9, 8, 8, 4}; +removeDuplicates(vec); // returns {2, 4, 5, 6, 8, 9} +``` diff --git a/snippets/cpp/vector-manipulation.md/remove-n-occurences.md b/snippets/cpp/vector-manipulation.md/remove-n-occurences.md new file mode 100644 index 00000000..aac7f676 --- /dev/null +++ b/snippets/cpp/vector-manipulation.md/remove-n-occurences.md @@ -0,0 +1,39 @@ +--- +title: Remove n Occurences +description: Removes duplicates from an vector of ints +author: AnkushRoy-code +tags: vector,remove +contributor: majvax +--- + +```cpp +#include +#include +#include + +bool removeOccurrences(std::vector& vec, const unsigned int n) noexcept { + if (vec.empty() || n == 0) return false; + + const auto size = vec.size(); + std::unordered_map frequency; // count frequencies + for (int num : vec) { + frequency[num]++; + } + + vec.erase( // remove elements with n number of occurrences + std::remove_if(vec.begin(), vec.end(), [&frequency, n](const int x) { + return frequency[x] == n; + }), + vec.end() + ); + return size != vec.size(); +} + + + +// Usage: +std::vector vec = {4, 2, 4, 8, 5, 6, 8, 8, 4, 3 }; + +int n = 3; // Remove elements that occur exactly 3 times +removeOccurrences(vec, n); // returns {2, 5, 6, 3} +``` diff --git a/snippets/cpp/array-manipulation/transform-vector.md b/snippets/cpp/vector-manipulation.md/transform.md similarity index 96% rename from snippets/cpp/array-manipulation/transform-vector.md rename to snippets/cpp/vector-manipulation.md/transform.md index e01cbabe..688eb7af 100644 --- a/snippets/cpp/array-manipulation/transform-vector.md +++ b/snippets/cpp/vector-manipulation.md/transform.md @@ -1,5 +1,5 @@ --- -Title: Transform Vector +Title: Transform Description: Transforms a vector using a function. Author: majvax Tags: array,transform,c++23