std::hive<T,Allocator>::unique
template< class BinaryPredicate = std::equal_to<T> > size_type unique( BinaryPredicate binary_pred = BinaryPredicate() ); | (начиная с C++26) |
Удаляет из контейнера все последовательные дублирующиеся элементы. В каждой группе равных элементов остаётся только первый элемент.
Формально, для непустого hive удаляются все элементы, на которые ссылается итератор i в [begin() + 1, end()) и для которых p(*i, *(i - 1)) истинно.
Ссылки, указатели и итераторы, ссылающиеся на удалённые элементы, становятся недействительными. Если удалён последний элемент в *this, итератор end() также становится недействительным.
Если binary_pred не задаёт отношение эквивалентности, поведение не определено.
Параметры
| p | - | бинарный предикат, который возвращает true, если элементы следует считать равными. Сигнатура функции-предиката должна быть эквивалентна следующей: boolpred(constType1&a,constType2&b); Хотя сигнатура не обязана содержать |
| Требования к типам | ||
-BinaryPredicate должен соответствовать требованиям BinaryPredicate. |
||
Возвращаемое значение
Количество удалённых элементов.
Сложность
Если empty() равно true, сравнения не выполняются.
В противном случае, если \(\scriptsize N\)N — это std::distance(begin(), end()): ровно \(\scriptsize N-1\)N-1 вызовов предиката p.
Пример
import std;
int main()
{
std::hive<int> c{1, 2, 2, 3, 3, 2, 1, 1, 2};
std::println("Before unique(): {}", c);
const auto count1 = c.unique();
std::println("After unique(): {} ({} elements removed)", c, count1);
c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2};
std::println("Before unique(pred): {}", c);
auto pred = [mod = 10](int x, int y) { return (x % mod) == (y % mod); };
const auto count2 = c.unique(pred);
std::println("After unique(pred): {} ({} elements removed)", c, count2);
}
Вывод:
Before unique(): [1, 2, 2, 3, 3, 2, 1, 1, 2] After unique(): [1, 2, 3, 2, 1, 2] (3 elements removed) Before unique(pred): [1, 2, 12, 23, 3, 2, 51, 1, 2, 2] After unique(pred): [1, 2, 23, 2, 51, 2] (4 elements removed)
См. также
| удаляет последовательные дублирующиеся элементы в диапазоне (шаблон функции и функциональный объект алгоритма) |
|
|
(C++20) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/hive/unique