29 #ifndef CDPL_UTIL_MULTIMAP_HPP
30 #define CDPL_UTIL_MULTIMAP_HPP
53 template <
typename ValueType,
bool Allow = true>
61 static const ValueType&
get()
72 template <
typename ValueType,
bool Allow>
79 template <
typename ValueType>
88 static const ValueType&
get()
114 template <
typename Key,
typename Value,
bool AllowDefValues =
false,
115 typename KeyCompFunc = std::less<Key> >
119 typedef std::multimap<Key, Value, KeyCompFunc> StorageType;
143 typedef typename StorageType::value_type
Entry;
193 template <
typename InputIter>
194 MultiMap(
const InputIter& first,
const InputIter& last):
205 template <
typename InputIter>
206 MultiMap(
const InputIter& first,
const InputIter& last,
const KeyCompFunc& func):
207 data(first, last, func)
375 const Value&
getValue(
const Key& key,
const Value& def_value)
const;
506 template <
typename InputIter>
519 template <
typename InputIter>
520 void setEntries(
const InputIter& first,
const InputIter& last);
653 const Value& getDefaultValue()
const;
666 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
678 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
690 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
702 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
714 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
726 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
736 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
737 typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
743 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
744 const typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
750 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
756 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
762 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
768 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
774 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
777 return data.key_comp();
780 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
783 return data.count(key);
786 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
790 return data.find(key);
793 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
797 return data.find(key);
800 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
804 return data.equal_range(key);
807 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
811 return data.equal_range(key);
814 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
819 if (lb == data.end() || data.key_comp()(key, (*lb).first)) {
823 return (*data.insert(lb,
Entry(key, getDefaultValue()))).second;
829 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
834 if (it == data.end())
840 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
845 if (it == data.end()) {
849 return getDefaultValue();
855 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
857 const Value& def_value)
const
861 if (it == data.end())
867 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
870 return getValue(key);
873 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
876 return getValue(key);
879 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
885 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
890 if (it == data.end())
897 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
900 return data.erase(key);
903 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
907 data.erase(first, last);
910 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
914 return data.insert(item);
917 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
921 return data.insert(
Entry(key, value));
924 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
928 return data.insert(it, item);
931 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
936 return data.insert(it,
Entry(key, value));
939 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
946 if (lb == end || data.key_comp()(item.first, (*lb).first))
947 return data.insert(lb, item);
951 while (range_end != end && !data.key_comp()(item.first, (*range_end).first))
954 data.erase(lb, range_end);
956 return data.insert(range_end, item);
959 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
963 return setEntry(
Entry(key, value));
966 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
967 template <
typename InputIter>
969 const InputIter& last)
971 data.insert(first, last);
974 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
975 template <
typename InputIter>
977 const InputIter& last)
979 for (InputIter it = first; it != last; ++it)
983 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
987 return data.lower_bound(key);
990 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
994 return data.lower_bound(key);
997 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1001 return data.upper_bound(key);
1004 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1008 return data.upper_bound(key);
1011 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1015 return data.begin();
1018 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1022 return data.begin();
1025 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1032 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1039 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1043 return data.begin();
1046 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1050 return data.begin();
1053 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1060 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1067 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1071 return data.rbegin();
1074 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1078 return data.rbegin();
1081 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1088 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1095 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1101 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1109 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1111 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1113 return (map1.getData() == map2.getData());
1116 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1118 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1120 return (map1.getData() != map2.getData());
1123 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1125 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1127 return (map1.getData() <= map2.getData());
1130 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1132 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1134 return (map1.getData() >= map2.getData());
1137 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1139 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1141 return (map1.getData() < map2.getData());
1144 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1146 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1148 return (map1.getData() > map2.getData());
Definition of exception classes.
Thrown to indicate that some requested data item could not be found.
Definition: Base/Exceptions.hpp:171
Thrown to indicate that some requested operation has failed (e.g. due to unfulfilled preconditions or...
Definition: Base/Exceptions.hpp:211
A multiple sorted associative container that maps keys to values.
Definition: MultiMap.hpp:117
Key KeyType
The type of the map's keys.
Definition: MultiMap.hpp:130
ConstEntryIterator getEntriesEnd() const
Returns a constant iterator pointing to the end of the map.
Definition: MultiMap.hpp:1027
void swap(MultiMap &map)
Swaps the contents with map.
Definition: MultiMap.hpp:769
EntryIterator insertEntry(const EntryIterator &it, const Entry &item)
Inserts the key/value pair item into the map and uses the iterator it as a hint for the insertion loc...
Definition: MultiMap.hpp:926
ConstReverseEntryIterator getEntriesReverseEnd() const
Returns a constant iterator pointing to the end of the reversed map.
Definition: MultiMap.hpp:1083
void removeEntries(const EntryIterator &first, const EntryIterator &last)
Removes all entries pointed to by the iterators in the range [first, last) from the map.
Definition: MultiMap.hpp:904
std::pair< EntryIterator, EntryIterator > EntryIteratorRange
A pair of mutable iterators used to specify the start and end of a range of entries.
Definition: MultiMap.hpp:168
virtual ~MultiMap()
Virtual destructor.
Definition: MultiMap.hpp:213
EntryIterator insertEntry(const Key &key, const Value &value)
Inserts a new entry with specified key and value into the map.
Definition: MultiMap.hpp:919
const Value & getValue(const Key &key) const
Returns a const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:841
const Value & operator[](const Key &key) const
Returns a const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:874
ConstEntryIterator getUpperBound(const Key &key) const
Returns a constant iterator pointing to the first entry whose key is greater than key.
Definition: MultiMap.hpp:1006
EntryIterator setEntry(const Entry &item)
Replaces all entries with a key equivalent to that of item with a single entry specified by item.
Definition: MultiMap.hpp:941
const StorageType & getData() const
Returns a const reference to the underlying map storage.
Definition: MultiMap.hpp:745
StorageType::iterator EntryIterator
A mutable iterator used to iterate over the entries of the map.
Definition: MultiMap.hpp:158
void setEntries(const InputIter &first, const InputIter &last)
Inserts new entries or updates the value of existing entries using the key/value pairs in the range [...
Definition: MultiMap.hpp:976
EntryIterator getLowerBound(const Key &key)
Returns a mutable iterator pointing to the first entry whose key is not less than key.
Definition: MultiMap.hpp:985
std::size_t getNumEntries(const Key &key) const
Returns the number of entries with the specified key.
Definition: MultiMap.hpp:781
EntryIterator getUpperBound(const Key &key)
Returns a mutable iterator pointing to the first entry whose key is greater than key.
Definition: MultiMap.hpp:999
ConstReverseEntryIterator getEntriesReverseBegin() const
Returns a constant iterator pointing to the beginning of the reversed map.
Definition: MultiMap.hpp:1069
MultiMap(const InputIter &first, const InputIter &last)
Creates and initializes the map with copies of the key value pairs in the range [first,...
Definition: MultiMap.hpp:194
EntryIterator insertEntry(const EntryIterator &it, const Key &key, const Value &value)
Inserts a new entry with the specified key and value into the map and uses the iterator it as a hint ...
Definition: MultiMap.hpp:933
EntryIterator setEntry(const Key &key, const Value &value)
Replaces all entries with a key equivalent to key with a single copy of the key/value pair (key,...
Definition: MultiMap.hpp:961
Value & getValue(const Key &key)
Returns a non-const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:815
EntryIterator insertEntry(const Entry &item)
Inserts the key/value pair item into the map.
Definition: MultiMap.hpp:912
void removeEntry(const EntryIterator &it)
Removes the entry pointed to by the iterator it from the map.
Definition: MultiMap.hpp:880
StorageType::value_type Entry
The type of the key/value pairs stored in the map.
Definition: MultiMap.hpp:143
ConstEntryIterator getEntry(const Key &key) const
Returns a constant iterator pointing to the first entry with the specified key.
Definition: MultiMap.hpp:795
EntryIterator end()
Returns a mutable iterator pointing to the end of the map.
Definition: MultiMap.hpp:1062
MultiMap(const KeyCompFunc &func)
Creates an empty map and uses func as key compare function.
Definition: MultiMap.hpp:185
MultiMap()
Creates an empty map.
Definition: MultiMap.hpp:178
Value ValueType
The type of the mapped values.
Definition: MultiMap.hpp:135
std::pair< ConstEntryIterator, ConstEntryIterator > ConstEntryIteratorRange
A pair of constant iterators used to specify the start and end of a range of entries.
Definition: MultiMap.hpp:173
Value & getValue(const Key &key, Value &def_value)
Returns a non-const reference to the first value associated with the specified key,...
Definition: MultiMap.hpp:830
void insertEntries(const InputIter &first, const InputIter &last)
Inserts the key/value pairs in the range [first, last) into the map.
Definition: MultiMap.hpp:968
std::size_t getSize() const
Returns the size (number of entries) of the map.
Definition: MultiMap.hpp:751
ReverseEntryIterator getEntriesReverseEnd()
Returns a mutable iterator pointing to the end of the reversed map.
Definition: MultiMap.hpp:1090
ReverseEntryIterator getEntriesReverseBegin()
Returns a mutable iterator pointing to the beginning of the reversed map.
Definition: MultiMap.hpp:1076
std::size_t removeEntries(const Key &key)
Removes all entries with the specified key from the map.
Definition: MultiMap.hpp:898
StorageType & getData()
Returns a non-const reference to the underlying map storage.
Definition: MultiMap.hpp:738
ConstEntryIteratorRange getEntries(const Key &key) const
Returns the bounds of a range that includes all entries with a key that compares equal to the specifi...
Definition: MultiMap.hpp:809
StorageType::const_reverse_iterator ConstReverseEntryIterator
A constant iterator used to iterate backwards over the entries of the map.
Definition: MultiMap.hpp:153
MultiMap(const InputIter &first, const InputIter &last, const KeyCompFunc &func)
Creates and initializes the map with copies of the key value pairs in the range [first,...
Definition: MultiMap.hpp:206
std::shared_ptr< MultiMap > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated MultiMap instances.
Definition: MultiMap.hpp:125
bool removeEntry(const Key &key)
Removes the first entry with the specified key from the map.
Definition: MultiMap.hpp:886
ConstEntryIterator begin() const
Returns a constant iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1041
KeyCompFunc getKeyCompareFunction() const
Returns the key compare function used by the map.
Definition: MultiMap.hpp:775
EntryIteratorRange getEntries(const Key &key)
Returns the bounds of a range that includes all entries with a key that compares equal to the specifi...
Definition: MultiMap.hpp:802
virtual const char * getClassName() const
Returns the name of the (derived) Map class.
Definition: MultiMap.hpp:1096
bool isEmpty() const
Tells whether the map is empty (getSize() == 0).
Definition: MultiMap.hpp:757
ConstEntryIterator getEntriesBegin() const
Returns a constant iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1013
EntryIterator begin()
Returns a mutable iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1048
StorageType::reverse_iterator ReverseEntryIterator
A mutable iterator used to iterate backwards over the entries of the map.
Definition: MultiMap.hpp:163
ConstEntryIterator getLowerBound(const Key &key) const
Returns a constant iterator pointing to the first entry whose key is not less than key.
Definition: MultiMap.hpp:992
Value & operator[](const Key &key)
Returns a non-const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:868
EntryIterator getEntriesEnd()
Returns a mutable iterator pointing to the end of the map.
Definition: MultiMap.hpp:1034
const Value & getValue(const Key &key, const Value &def_value) const
Returns a const reference to the first value associated with the specified key, or the value given by...
Definition: MultiMap.hpp:856
ConstEntryIterator end() const
Returns a constant iterator pointing to the end of the map.
Definition: MultiMap.hpp:1055
StorageType::const_iterator ConstEntryIterator
A constant iterator used to iterate over the entries of the map.
Definition: MultiMap.hpp:148
void clear()
Erases all entries.
Definition: MultiMap.hpp:763
EntryIterator getEntry(const Key &key)
Returns a mutable iterator pointing to the first entry with the specified key.
Definition: MultiMap.hpp:788
EntryIterator getEntriesBegin()
Returns a mutable iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1020
bool operator<(const Array< ValueType > &array1, const Array< ValueType > &array2)
Less than comparison operator.
bool operator>=(const Array< ValueType > &array1, const Array< ValueType > &array2)
Greater or equal comparison operator.
bool operator>(const Array< ValueType > &array1, const Array< ValueType > &array2)
Greater than comparison operator.
bool operator!=(const Array< ValueType > &array1, const Array< ValueType > &array2)
Inequality comparison operator.
bool operator<=(const Array< ValueType > &array1, const Array< ValueType > &array2)
Less or equal comparison operator.
bool operator==(const Array< ValueType > &array1, const Array< ValueType > &array2)
Equality comparison operator.
The namespace of the Chemical Data Processing Library.
static const ValueType & get()
Always throws, since default values are not supported for this map configuration.
Definition: MultiMap.hpp:88
Helper supplying the default value returned by Util::MultiMap when a queried key is absent.
Definition: MultiMap.hpp:55
static const ValueType & get()
Returns a const reference to the shared default-constructed value.
Definition: MultiMap.hpp:61
static const ValueType defValue
The default-constructed value returned for an absent key.
Definition: MultiMap.hpp:69