[hive.operations] # 23 Containers library [[containers]](./#containers) ## 23.3 Sequence containers [[sequences]](sequences#hive.operations) ### 23.3.9 Class template hive [[hive]](hive#operations) #### 23.3.9.5 Operations [hive.operations] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8790) In this subclause, arguments for a template parameter named Predicate or BinaryPredicate shall meet the corresponding requirements in [[algorithms.requirements]](algorithms.requirements "26.2 Algorithms requirements")[.](#1.sentence-1) The semantics of i + n and i - n, where i is an iterator into the hive and n is an integer, are the same as those of next(i, n) and prev(i, n), respectively[.](#1.sentence-2) For sort, the definitions and requirements in [[alg.sorting]](alg.sorting "26.8 Sorting and related operations") apply[.](#1.sentence-3) [🔗](#lib:splice,hive) `void splice(hive& x); void splice(hive&& x); ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8807) *Preconditions*: get_allocator() == x.get_allocator() is true[.](#2.sentence-1) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8811) *Effects*: If addressof(x) == this is true, the behavior is erroneous and there are no effects[.](#3.sentence-1) Otherwise, inserts the contents of x into *this andx becomes empty[.](#3.sentence-2) Pointers and references to the moved elements of x now refer to those same elements but as members of *this[.](#3.sentence-3) Iterators referring to the moved elements continue to refer to their elements, but they now behave as iterators into *this, not into x[.](#3.sentence-4) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8822) *Throws*: length_error if any of x's active blocks are not within the bounds of *current-limits*[.](#4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8827) *Complexity*: Linear in the sum of all element blocks in x plus all element blocks in *this[.](#5.sentence-1) [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8832) *Remarks*: Reserved blocks in x are not transferred into *this[.](#6.sentence-1) If addressof(x) == this is false, invalidates the past-the-end iterator for both x and *this[.](#6.sentence-2) [🔗](#lib:unique,hive) `template> size_type unique(BinaryPredicate binary_pred = BinaryPredicate()); ` [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8846) *Preconditions*: binary_pred is an equivalence relation[.](#7.sentence-1) [8](#8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8850) *Effects*: Erases all but the first element from every consecutive group of equivalent elements[.](#8.sentence-1) That is, for a nonempty hive, erases all elements referred to by the iterator i in the range [begin() + 1, end()) for which binary_pred(*i, *(i - 1)) is true[.](#8.sentence-2) [9](#9) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8859) *Returns*: The number of elements erased[.](#9.sentence-1) [10](#10) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8863) *Throws*: Nothing unless an exception is thrown by the predicate[.](#10.sentence-1) [11](#11) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8867) *Complexity*: If empty() is false, exactly size() - 1 applications of the corresponding predicate, otherwise no applications of the predicate[.](#11.sentence-1) [12](#12) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8873) *Remarks*: Invalidates references, pointers, and iterators referring to the erased elements[.](#12.sentence-1) If the last element in *this is erased, also invalidates the past-the-end iterator[.](#12.sentence-2) [🔗](#lib:sort,hive) `template> void sort(Compare comp = Compare()); ` [13](#13) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8888) *Preconditions*: T is *Cpp17MoveInsertable* into hive,*Cpp17MoveAssignable*, and *Cpp17Swappable*[.](#13.sentence-1) [14](#14) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8893) *Effects*: Sorts *this according to the comp function object[.](#14.sentence-1) If an exception is thrown, the order of the elements in *this is unspecified[.](#14.sentence-2) [15](#15) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8899) *Complexity*: O(NlogN) comparisons, where N is size()[.](#15.sentence-1) [16](#16) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8903) *Remarks*: May allocate[.](#16.sentence-1) References, pointers, and iterators referring to elements in *this, as well as the past-the-end iterator, may be invalidated[.](#16.sentence-2) [*Note [1](#note-1)*: Not required to be stable[[algorithm.stable]](algorithm.stable "16.4.6.8 Requirements for stable algorithms")[.](#16.sentence-3) — *end note*] [🔗](#lib:get_iterator,hive) `iterator get_iterator(const_pointer p) noexcept; const_iterator get_iterator(const_pointer p) const noexcept; ` [17](#17) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8920) *Preconditions*: p points to an element in *this[.](#17.sentence-1) [18](#18) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8924) *Returns*: An iterator or const_iterator pointing to the same element as p[.](#18.sentence-1) [19](#19) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/containers.tex#L8929) *Complexity*: Linear in the number of active blocks in *this[.](#19.sentence-1)