17 const char*
what() const noexcept
override {
return msg_.c_str(); }
28template <Un
signedIntegral Key,
typename Value>
31 std::vector<Key> sparse;
32 std::vector<Key> dense;
33 std::vector<Value> values;
41 throw std::length_error(
"Key exceeds the maximum size limit.");
44 if (
key >= sparse.size())
46 sparse.resize(
key * 2 + 1, std::numeric_limits<Key>::max());
57 if (sparse[
key] == std::numeric_limits<Key>::max())
59 sparse[
key] =
static_cast<Key>(values.size());
61 values.push_back(
value);
73 if (sparse[
key] == std::numeric_limits<Key>::max())
75 sparse[
key] =
static_cast<Key>(values.size());
77 values.push_back(std::move(
value));
80 values[sparse[
key]] = std::move(
value);
91 return values[sparse[
key]];
101 return values[sparse[
key]];
125 sparse[
key] = std::numeric_limits<Key>::max();
130 template <
typename Func>
133 for (
size_t i = 0;
i < values.size(); ++
i)
135 f(dense[
i], values[
i]);
141 return key < sparse.size() && sparse[
key] != std::numeric_limits<Key>::max();
144 constexpr size_t size()
const {
return dense.size(); }
146 inline const std::vector<Key>&
getKeys()
const {
return dense; }
148 inline std::vector<Value>&
getValues() {
return values; }
150 inline const std::vector<Value>&
getValues()
const {
return values; }
154 constexpr size_t maxKeyVal =
static_cast<size_t>(std::numeric_limits<Key>::max());
155 return std::min({
maxKeyVal, dense.max_size(), values.max_size()});
Definition sparse_set.hpp:13
KeyNotFoundException(const std::string &key)
Definition sparse_set.hpp:15
const char * what() const noexcept override
Definition sparse_set.hpp:17
Definition sparse_set.hpp:29
const Value & operator[](const Key key) const
Definition sparse_set.hpp:104
constexpr size_t maxSize() const noexcept
Definition sparse_set.hpp:152
void remove(const Key key)
Definition sparse_set.hpp:108
void set(const Key key, Value &&value)
Definition sparse_set.hpp:69
std::vector< Value > & getValues()
Definition sparse_set.hpp:148
void accommodate(const Key key)
Definition sparse_set.hpp:37
Value & operator[](const Key key)
Definition sparse_set.hpp:105
const std::vector< Key > & getKeys() const
Definition sparse_set.hpp:146
constexpr size_t size() const
Definition sparse_set.hpp:144
void set(const Key key, const Value &value)
Definition sparse_set.hpp:53
void forEach(Func f)
Definition sparse_set.hpp:131
const std::vector< Value > & getValues() const
Definition sparse_set.hpp:150
Value & get(const Key key)
Definition sparse_set.hpp:95
constexpr bool contains(const Key key) const
Definition sparse_set.hpp:139
const Value & get(const Key key) const
Definition sparse_set.hpp:85
void clear()
Definition sparse_set.hpp:158
Definition sparse_set.hpp:26