How to Remove Duplicate Elements from Vector in C++ using std::u
- 时间:2020-10-11 15:17:18
- 分类:网络文摘
- 阅读:93 次
Removing duplicate elements and only keeping the unique items in an array (or vector, list) is easy. We can use std::unique method from STL.
The std::unique (from algorithms header) has the following signature:
1 2 3 4 5 | template<class ForwardIt> ForwardIt unique(ForwardIt first, ForwardIt last); template<class ForwardIt, class BinaryPredicate> ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p); |
template<class ForwardIt> ForwardIt unique(ForwardIt first, ForwardIt last); template<class ForwardIt, class BinaryPredicate> ForwardIt unique(ForwardIt first, ForwardIt last, BinaryPredicate p);
Example C++ code to use std::unique to remove duplicate numbers from vector
It requires the vector to be sorted. Here is an example use:
1 2 3 4 5 6 7 | vector <int> arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5}; auto it = std::unqiue(begin(arr), end(arr)); // now arr becomes: {1, 2, 3, 4, 5, x, x, x, x, x, x} // x is indeterminate // then we can trim the array to make a unique arr.erase(it, end(arr)); // x is now {1, 2, 3, 4, 5} |
vector <int> arr = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5}; auto it = std::unqiue(begin(arr), end(arr)); // now arr becomes: {1, 2, 3, 4, 5, x, x, x, x, x, x} // x is indeterminate // then we can trim the array to make a unique arr.erase(it, end(arr)); // x is now {1, 2, 3, 4, 5}
The std::unique function will return the iterator that is beyond the last element of the unique array – which can be used later for removing the extra duplicate elements from the C++ list/vector.
C++ Generic Implementations of std::unique using template
Here are two possible implementation of the generic std::unique method:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | template<class F> F unique(F first, F last) { if (first == last) { return last; } F res = first; while (++first != last) { if (!(*res == *first) && ++ res != first) { *res = std::move(*first); } } return ++ res; } template<class F, class BinaryPredicate> F unique(F first, F last, BinaryPredicate p) { if (first == last) { return last; } F res = first; while (++first != last) { if (!p(*res, *first) && ++res != first) { *result = std::move(*first); } } return ++res; } |
template<class F> F unique(F first, F last) { if (first == last) { return last; } F res = first; while (++first != last) { if (!(*res == *first) && ++ res != first) { *res = std::move(*first); } } return ++ res; } template<class F, class BinaryPredicate> F unique(F first, F last, BinaryPredicate p) { if (first == last) { return last; } F res = first; while (++first != last) { if (!p(*res, *first) && ++res != first) { *result = std::move(*first); } } return ++res; }
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:Wix vs Squarespace 2020 – Things You Must Know How to Delete N Nodes After M Nodes of a Linked List? Bruteforce Algorithm to Find the Unique Positive Integer Whose S Clone (Deep Copy) Binary Tree With Random Pointer using Hash Map How to Compute Running Sum of 1d Array using std::partial_sum in How to Renew the Free SSL Certificates (Nginx Server)? Design: How to Solve 503 Error of API when Resources are not ava SteemJs Programming: What Happens on the Steem Blockchain in the How to Set Up Your On-Call Duty when Your Steem Witness is Missi Common Mistakes You Can Face With Trying to switch Your Hosting
- 评论列表
-
- 添加评论