Rate this Page

Template Class OrderedDict#

Nested Relationships#

Class Documentation#

template<typename Key, typename Value>
class OrderedDict#

An ordered dictionary implementation, akin to Python’s OrderedDict.

Public Types

using Iterator = typename std::vector<Item>::iterator#
using ConstIterator = typename std::vector<Item>::const_iterator#

Public Functions

explicit OrderedDict(std::string key_description = "Key")#

Constructs the OrderedDict with a short description of the kinds of keys stored in the OrderedDict.

This description is used in error messages thrown by the OrderedDict.

OrderedDict(const OrderedDict &other)#

Copy constructs this OrderedDict from other.

OrderedDict &operator=(const OrderedDict &other)#

Assigns items from other to this OrderedDict.

OrderedDict(OrderedDict &&other) noexcept = default#
OrderedDict &operator=(OrderedDict &&other) noexcept = default#
~OrderedDict() = default#
OrderedDict(std::initializer_list<Item> initializer_list)#

Constructs a new OrderedDict and pre-populates it with the given Items.

const std::string &key_description() const noexcept#

Returns the key description string the OrderedDict was constructed with.

Item &front()#

Returns the very first item in the OrderedDict and throws an exception if it is empty.

const Item &front() const#

Returns the very first item in the OrderedDict and throws an exception if it is empty.

Item &back()#

Returns the very last item in the OrderedDict and throws an exception if it is empty.

const Item &back() const#

Returns the very last item in the OrderedDict and throws an exception if it is empty.

Item &operator[](size_t index)#

Returns the item at the index-th position in the OrderedDict.

Throws an exception if the index is out of bounds.

const Item &operator[](size_t index) const#

Returns the item at the index-th position in the OrderedDict.

Throws an exception if the index is out of bounds.

Value &operator[](const Key &key)#

Returns the value associated with the given key.

Throws an exception if no such key is stored in the OrderedDict. Use find() for a non-throwing way of accessing a value if it is present.

const Value &operator[](const Key &key) const#

Returns the value associated with the given key.

Throws an exception if no such key is stored in the OrderedDict. Use find() for a non-throwing way of accessing a value if it is present.

Value *find(const Key &key) noexcept#

Returns a pointer to the value associated with the given key, or a nullptr if no such key is stored in the OrderedDict.

const Value *find(const Key &key) const noexcept#

Returns a pointer to the value associated with the given key, or a nullptr if no such key is stored in the OrderedDict.

bool contains(const Key &key) const noexcept#

Returns true if the key is present in the OrderedDict.

Iterator begin()#

Returns an iterator to the first item in the OrderedDict.

Iteration is ordered.

ConstIterator begin() const#

Returns an iterator to the first item in the OrderedDict.

Iteration is ordered.

Iterator end()#

Returns an iterator one past the last item in the OrderedDict.

ConstIterator end() const#

Returns an iterator one past the last item in the OrderedDict.

size_t size() const noexcept#

Returns the number of items currently stored in the OrderedDict.

bool is_empty() const noexcept#

Returns true if the OrderedDict contains no elements.

void reserve(size_t requested_capacity)#

Resizes internal storage to fit at least requested_capacity items without requiring reallocation.

template<typename K, typename V>
Value &insert(K &&key, V &&value)#

Inserts a new (key, value) pair into the OrderedDict.

Throws an exception if the key is already present. If insertion is successful, immediately returns a reference to the inserted value.

Value &insert(Key key, Value &&value)#

Inserts a new (key, value) pair into the OrderedDict.

Throws an exception if the key is already present. If insertion is successful, immediately returns a reference to the inserted value.

void update(OrderedDict &&other)#

Inserts all items from other into this OrderedDict.

If any key from other is already present in this OrderedDict, an exception is thrown.

void update(const OrderedDict &other)#

Inserts all items from other into this OrderedDict.

If any key from other is already present in this OrderedDict, an exception is thrown.

void erase(const Key &key)#

Removes the item that has key from this OrderedDict if exists and if it doesn’t an exception is thrown.

void clear()#

Removes all items from this OrderedDict.

const std::vector<Item> &items() const noexcept#

Returns the items stored in the OrderedDict.

::std::vector<Key> keys() const#

Returns a newly allocated vector and copies all keys from this OrderedDict into the vector.

::std::vector<Value> values() const#

Returns a newly allocated vector and copies all values from this OrderedDict into the vector.

::std::vector<std::pair<Key, Value>> pairs() const#

Returns a newly allocated vector and copies all keys and values from this OrderedDict into a vector of std::pair<Key, Value>.

Friends

template<typename K, typename V>
friend bool operator==(const OrderedDict<K, V> &a, const OrderedDict<K, V> &b)#

Returns true if both dicts contain the same keys and values, in the same order.

class Item#

Public Functions

inline Item(Key key, Value value)#

Constructs a new item.

inline Value &operator*()#

Returns a reference to the value.

inline const Value &operator*() const#

Returns a reference to the value.

inline Value *operator->()#

Allows access to the value using the arrow operator.

inline const Value *operator->() const#

Allows access to the value using the arrow operator.

inline const Key &key() const noexcept#

Returns a reference to the key.

inline Value &value() noexcept#

Returns a reference to the value.

inline const Value &value() const noexcept#

Returns a reference to the value.

inline const std::pair<Key, Value> &pair() const noexcept#

Returns a (key, value) pair.