Standard library header <hive> (C++26)
From cppreference.com
This header is part of the containers library.
Includes | |
(C++20) |
Three-way comparison operator support |
(C++11) |
std::initializer_list class template |
Classes | |
(C++26) |
layout information about block capacity limits in std::hive (class) |
(C++26) |
collection that reuses erased elements' memory (class template) |
Functions | |
(C++26) |
specializes the std::swap algorithm (function template) |
| erases all elements satisfying specific criteria (function template) | |
Synopsis
#include <compare>
#include <initializer_list>
namespace std {
struct hive_limits
{
size_t min;
size_t max;
constexpr hive_limits(size_t minimum, size_t maximum) noexcept
: min(minimum)
, max(maximum)
{
}
};
// class template hive
template<class T, class Allocator = allocator<T>> class hive;
template<class T, class Allocator>
void swap(hive<T, Allocator>& x, hive<T, Allocator>& y) noexcept(noexcept(x.swap(y)));
template<class T, class Allocator, class U = T>
typename hive<T, Allocator>::size_type erase(hive<T, Allocator>& c, const U& value);
template<class T, class Allocator, class Predicate>
typename hive<T, Allocator>::size_type erase_if(hive<T, Allocator>& c, Predicate pred);
namespace pmr {
template<class T> using hive = std::hive<T, polymorphic_allocator<T>>;
}
}
Class template std::hive
namespace std {
template<class T, class Allocator = allocator<T>> class hive
{
public:
// types
using value_type = T;
using allocator_type = Allocator;
using pointer = allocator_traits<Allocator>::pointer;
using const_pointer = allocator_traits<Allocator>::const_pointer;
using reference = value_type&;
using const_reference = const value_type&;
using size_type = /* implementation-defined */;
using difference_type = /* implementation-defined */;
using iterator = /* implementation-defined */;
using const_iterator = /* implementation-defined */;
using reverse_iterator = std::reverse_iterator<iterator>;
using const_reverse_iterator = std::reverse_iterator<const_iterator>;
// construct/copy/destroy
constexpr hive() noexcept(noexcept(Allocator()))
: hive(Allocator())
{
}
constexpr explicit hive(const Allocator&) noexcept;
constexpr explicit hive(hive_limits block_limits)
: hive(block_limits, Allocator())
{
}
constexpr hive(hive_limits block_limits, const Allocator&);
explicit hive(size_type n, const Allocator& = Allocator());
hive(size_type n, hive_limits block_limits, const Allocator& = Allocator());
hive(size_type n, const T& value, const Allocator& = Allocator());
hive(size_type n,
const T& value,
hive_limits block_limits,
const Allocator& = Allocator());
template<class InputIter>
hive(InputIter first, InputIter last, const Allocator& = Allocator());
template<class InputIter>
hive(InputIter first,
InputIter last,
hive_limits block_limits,
const Allocator& = Allocator());
template<container-compatible-range<T> R>
hive(from_range_t, R&& rg, const Allocator& = Allocator());
template<container-compatible-range<T> R>
hive(from_range_t, R&& rg, hive_limits block_limits, const Allocator& = Allocator());
hive(const hive& x);
hive(hive&&) noexcept;
hive(const hive& x, const type_identity_t<Allocator>& alloc);
hive(hive&&, const type_identity_t<Allocator>& alloc);
hive(initializer_list<T> il, const Allocator& = Allocator());
hive(initializer_list<T> il,
hive_limits block_limits,
const Allocator& = Allocator());
~hive();
hive& operator=(const hive& x);
hive& operator=(hive&& x) noexcept(/* see description */);
hive& operator=(initializer_list<T>);
template<class InputIter> void assign(InputIter first, InputIter last);
template<container-compatible-range<T> R> void assign_range(R&& rg);
void assign(size_type n, const T& t);
void assign(initializer_list<T>);
allocator_type get_allocator() const noexcept;
// iterators
iterator begin() noexcept;
const_iterator begin() const noexcept;
iterator end() noexcept;
const_iterator end() const noexcept;
reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;
reverse_iterator rend() noexcept;
const_reverse_iterator rend() const noexcept;
const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;
const_reverse_iterator crbegin() const noexcept;
const_reverse_iterator crend() const noexcept;
// capacity
bool empty() const noexcept;
size_type size() const noexcept;
size_type max_size() const noexcept;
size_type capacity() const noexcept;
void reserve(size_type n);
void shrink_to_fit();
void trim_capacity() noexcept;
void trim_capacity(size_type n) noexcept;
constexpr hive_limits block_capacity_limits() const noexcept;
static constexpr hive_limits block_capacity_default_limits() noexcept;
static constexpr hive_limits block_capacity_hard_limits() noexcept;
static constexpr bool is_within_hard_limits(hive_limits) noexcept;
void reshape(hive_limits block_limits);
// modifiers
template<class... Args> iterator emplace(Args&&... args);
template<class... Args> iterator emplace_hint(const_iterator hint, Args&&... args);
iterator insert(const T& x);
iterator insert(T&& x);
iterator insert(const_iterator hint, const T& x);
iterator insert(const_iterator hint, T&& x);
void insert(initializer_list<T> il);
template<container-compatible-range<T> R> void insert_range(R&& rg);
template<class InputIter> void insert(InputIter first, InputIter last);
void insert(size_type n, const T& x);
iterator erase(const_iterator position);
iterator erase(const_iterator first, const_iterator last);
void swap(hive&) noexcept(/* see description */);
void clear() noexcept;
// hive operations
void splice(hive& x);
void splice(hive&& x);
template<class BinaryPredicate = equal_to<T>>
size_type unique(BinaryPredicate binary_pred = BinaryPredicate());
template<class Compare = less<T>> void sort(Compare comp = Compare());
iterator get_iterator(const_pointer p) noexcept;
const_iterator get_iterator(const_pointer p) const noexcept;
private:
hive_limits /*current-limits*/ = /* implementation-defined */; // exposition-only
};
template<class InputIter, class Allocator = allocator</*iter-value-type*/<InputIter>>>
hive(InputIter, InputIter, Allocator = Allocator())
-> hive</*iter-value-type*/<InputIter>, Allocator>;
template<class InputIter, class Allocator = allocator</*iter-value-type*/<InputIter>>>
hive(InputIter, InputIter, hive_limits, Allocator = Allocator())
-> hive</*iter-value-type*/<InputIter>, Allocator>;
template<ranges::input_range R, class Allocator = allocator<ranges::range_value_t<R>>>
hive(from_range_t, R&&, Allocator = Allocator())
-> hive<ranges::range_value_t<R>, Allocator>;
template<ranges::input_range R, class Allocator = allocator<ranges::range_value_t<R>>>
hive(from_range_t, R&&, hive_limits, Allocator = Allocator())
-> hive<ranges::range_value_t<R>, Allocator>;
}