Chromium Code Reviews| Index: base/containers/flat_tree.h |
| diff --git a/base/containers/flat_tree.h b/base/containers/flat_tree.h |
| index c3a234fa784c4f0e0e151d9711d0265b756473fd..e462b1688335dab8c5a00191831b6f728242c289 100644 |
| --- a/base/containers/flat_tree.h |
| +++ b/base/containers/flat_tree.h |
| @@ -8,6 +8,8 @@ |
| #include <algorithm> |
| #include <vector> |
| +#include "base/algorithm/sorted_ranges.h" |
| + |
| namespace base { |
| enum FlatContainerDupes { |
| @@ -17,31 +19,6 @@ enum FlatContainerDupes { |
| namespace internal { |
| -// This algorithm is like unique() from the standard library except it |
| -// selects only the last of consecutive values instead of the first. |
| -template <class Iterator, class BinaryPredicate> |
| -Iterator LastUnique(Iterator first, Iterator last, BinaryPredicate compare) { |
| - if (first == last) |
| - return last; |
| - |
| - Iterator dest = first; |
| - Iterator cur = first; |
| - Iterator prev = cur; |
| - while (++cur != last) { |
| - if (!compare(*prev, *cur)) { |
| - // Non-identical one. |
| - if (dest != prev) |
|
dyaroshev
2017/04/08 16:48:03
I suspect, that the main reason why this way is sl
|
| - *dest = std::move(*prev); |
| - ++dest; |
| - } |
| - prev = cur; |
| - } |
| - |
| - if (dest != prev) |
| - *dest = std::move(*prev); |
| - return ++dest; |
| -} |
| - |
| // Implementation of a sorted vector for backing flat_set and flat_map. Do not |
| // use directly. |
| // |
| @@ -329,7 +306,7 @@ class flat_tree { |
| erase_after = std::unique(begin(), end(), comparator); |
| break; |
| case KEEP_LAST_OF_DUPES: |
| - erase_after = LastUnique(begin(), end(), comparator); |
| + erase_after = UniquePickLast(begin(), end(), comparator); |
| break; |
| } |
| erase(erase_after, end()); |