C/C++ API Reference
Loading...
Searching...
No Matches
pw::IntrusiveMultiMap< Key, T > Class Template Reference

Overview

template<typename Key, typename T>
class pw::IntrusiveMultiMap< Key, T >

A std::multimap<Key, T, Compare>-like class that uses intrusive items.

Since the map structure is stored in the items themselves, each item must outlive any map it is a part of and must be part of at most one map.

This map requires unique keys. Attempting to add an item with same key as an item already in the map will fail.

  • Since items are not allocated by this class, the following methods have no analogue:
    • std::multimap<T>::operator=
    • std::multimap<T>::get_allocator
    • std::multimap<T>::emplace
    • std::multimap<T>::emplace_hint
  • Methods corresponding to the following take initializer lists of pointer to items rather than the items themselves:
    • std::multimap<T>::(constructor)
    • std::multimap<T>::insert
  • There are no overloads corresponding to the following methods that take r-value references.:
    • std::multimap<T>::insert
    • std::multimap<T>::merge
  • Since modifying the map modifies the items themselves, methods corresponding to those below only take iterators and not const_iterators:
    • std::multimap<T>::insert
    • std::multimap<T>::erase
  • An additional overload of erase is provided that takes a direct reference to an item.
  • C++23 methods are not (yet) supported.
Template Parameters
KeyType to sort items on
TType of values stored in the map.

Classes

class  const_iterator
 
class  iterator
 

Public Types

using Item = typename Tree::Item
 
using Pair = typename Tree::Pair
 
using key_type = Key
 
using mapped_type = std::remove_cv_t< T >
 
using value_type = Item
 
using size_type = std::size_t
 
using difference_type = std::ptrdiff_t
 
using key_compare = Compare
 
using reference = value_type &
 
using const_reference = const value_type &
 
using pointer = value_type *
 
using const_pointer = const value_type *
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 

Public Member Functions

constexpr IntrusiveMultiMap ()
 Constructs an empty map of items.
 
template<typename Comparator >
constexpr IntrusiveMultiMap (Comparator compare)
 
template<typename Comparator , typename KeyRetriever >
constexpr IntrusiveMultiMap (Comparator &&compare, KeyRetriever &&get_key)
 
template<typename Iterator , typename... Functors>
 IntrusiveMultiMap (Iterator first, Iterator last, Functors &&... functors)
 
template<typename... Functors>
 IntrusiveMultiMap (std::initializer_list< T * > items, Functors &&... functors)
 
iterator begin () noexcept
 
const_iterator begin () const noexcept
 
const_iterator cbegin () const noexcept
 
iterator end () noexcept
 
const_iterator end () const noexcept
 
const_iterator cend () const noexcept
 
reverse_iterator rbegin () noexcept
 
const_reverse_iterator rbegin () const noexcept
 
const_reverse_iterator crbegin () const noexcept
 
reverse_iterator rend () noexcept
 
const_reverse_iterator rend () const noexcept
 
const_reverse_iterator crend () const noexcept
 
bool empty () const noexcept
 Returns whether the multimap has zero items or not.
 
size_t size () const
 Returns the number of items in the multimap.
 
constexpr size_t max_size () const noexcept
 
void clear ()
 
iterator insert (T &item)
 Adds the given item to the multimap.
 
iterator insert (iterator, T &item)
 
template<class Iterator >
void insert (Iterator first, Iterator last)
 
void insert (std::initializer_list< T * > ilist)
 
iterator erase (T &item)
 
iterator erase (iterator pos)
 
iterator erase (iterator first, iterator last)
 
size_t erase (const Key &key)
 
void swap (IntrusiveMultiMap< Key, T > &other)
 Exchanges this multimap's items with the other multimap's items.
 
template<typename MapType >
void merge (MapType &other)
 Splices items from the other map into this one.
 
size_t count (const Key &key) const
 Returns the number of items in the multimap with the given key.
 
iterator find (const Key &key)
 
const_iterator find (const Key &key) const
 
std::pair< iterator, iteratorequal_range (const Key &key)
 
std::pair< const_iterator, const_iteratorequal_range (const Key &key) const
 
iterator lower_bound (const Key &key)
 
const_iterator lower_bound (const Key &key) const
 
iterator upper_bound (const Key &key)
 
const_iterator upper_bound (const Key &key) const
 

Friends

template<typename , typename >
class IntrusiveMap
 

The documentation for this class was generated from the following file: