cppreference.com
Namespaces
Variants

Standard library header <hive> (C++26)

From cppreference.com
 
 
Standard library headers
 

This header is part of the containers library.

Includes

(C++20)
Three-way comparison operator support[edit]
std::initializer_list class template[edit]

Classes

layout information about block capacity limits in std::hive
(class) [edit]
(C++26)
collection that reuses erased elements' memory
(class template) [edit]

Functions

specializes the std::swap algorithm
(function template) [edit]
erases all elements satisfying specific criteria
(function template) [edit]

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>;
}