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)
376 const Value&
getValue(
const Key& key,
const Value& def_value)
const;
507 template <
typename InputIter>
520 template <
typename InputIter>
521 void setEntries(
const InputIter& first,
const InputIter& last);
654 const Value& getDefaultValue()
const;
667 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
679 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
691 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
703 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
715 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
727 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
737 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
738 typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
744 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
745 const typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
751 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
757 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
763 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
769 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
775 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
778 return data.key_comp();
781 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
784 return data.count(key);
787 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
791 return data.find(key);
794 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
798 return data.find(key);
801 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
805 return data.equal_range(key);
808 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
812 return data.equal_range(key);
815 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
820 if (lb == data.end() || data.key_comp()(key, (*lb).first)) {
824 return (*data.insert(lb,
Entry(key, getDefaultValue()))).second;
830 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
835 if (it == data.end())
841 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
846 if (it == data.end()) {
850 return getDefaultValue();
856 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
858 const Value& def_value)
const
862 if (it == data.end())
868 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
871 return getValue(key);
874 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
877 return getValue(key);
880 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
886 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
891 if (it == data.end())
898 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
901 return data.erase(key);
904 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
908 data.erase(first, last);
911 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
915 return data.insert(item);
918 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
922 return data.insert(
Entry(key, value));
925 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
929 return data.insert(it, item);
932 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
937 return data.insert(it,
Entry(key, value));
940 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
947 if (lb == end || data.key_comp()(item.first, (*lb).first))
948 return data.insert(lb, item);
952 while (range_end != end && !data.key_comp()(item.first, (*range_end).first))
955 data.erase(lb, range_end);
957 return data.insert(range_end, item);
960 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
964 return setEntry(
Entry(key, value));
967 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
968 template <
typename InputIter>
970 const InputIter& last)
972 data.insert(first, last);
975 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
976 template <
typename InputIter>
978 const InputIter& last)
980 for (InputIter it = first; it != last; ++it)
984 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
988 return data.lower_bound(key);
991 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
995 return data.lower_bound(key);
998 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1002 return data.upper_bound(key);
1005 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1009 return data.upper_bound(key);
1012 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1016 return data.begin();
1019 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1023 return data.begin();
1026 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1033 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1040 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1044 return data.begin();
1047 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1051 return data.begin();
1054 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1061 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1068 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1072 return data.rbegin();
1075 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1079 return data.rbegin();
1082 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1089 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1096 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1102 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1110 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1112 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1114 return (map1.getData() == map2.getData());
1117 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1119 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1121 return (map1.getData() != map2.getData());
1124 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1126 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1128 return (map1.getData() <= map2.getData());
1131 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1133 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1135 return (map1.getData() >= map2.getData());
1138 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1140 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1142 return (map1.getData() < map2.getData());
1145 template <
typename Key,
typename Value,
bool AllowDefValues,
typename KeyCompFunc>
1147 const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1149 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:1028
void swap(MultiMap &map)
Swaps the contents with map.
Definition: MultiMap.hpp:770
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:927
ConstReverseEntryIterator getEntriesReverseEnd() const
Returns a constant iterator pointing to the end of the reversed map.
Definition: MultiMap.hpp:1084
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:905
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:920
const Value & getValue(const Key &key) const
Returns a const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:842
const Value & operator[](const Key &key) const
Returns a const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:875
ConstEntryIterator getUpperBound(const Key &key) const
Returns a constant iterator pointing to the first entry whose key is greater than key.
Definition: MultiMap.hpp:1007
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:942
const StorageType & getData() const
Returns a const reference to the underlying map storage.
Definition: MultiMap.hpp:746
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:977
EntryIterator getLowerBound(const Key &key)
Returns a mutable iterator pointing to the first entry whose key is not less than key.
Definition: MultiMap.hpp:986
std::size_t getNumEntries(const Key &key) const
Returns the number of entries with the specified key.
Definition: MultiMap.hpp:782
EntryIterator getUpperBound(const Key &key)
Returns a mutable iterator pointing to the first entry whose key is greater than key.
Definition: MultiMap.hpp:1000
ConstReverseEntryIterator getEntriesReverseBegin() const
Returns a constant iterator pointing to the beginning of the reversed map.
Definition: MultiMap.hpp:1070
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:934
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:962
Value & getValue(const Key &key)
Returns a non-const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:816
EntryIterator insertEntry(const Entry &item)
Inserts the key/value pair item into the map.
Definition: MultiMap.hpp:913
void removeEntry(const EntryIterator &it)
Removes the entry pointed to by the iterator it from the map.
Definition: MultiMap.hpp:881
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:796
EntryIterator end()
Returns a mutable iterator pointing to the end of the map.
Definition: MultiMap.hpp:1063
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:831
void insertEntries(const InputIter &first, const InputIter &last)
Inserts the key/value pairs in the range [first, last) into the map.
Definition: MultiMap.hpp:969
std::size_t getSize() const
Returns the size (number of entries) of the map.
Definition: MultiMap.hpp:752
ReverseEntryIterator getEntriesReverseEnd()
Returns a mutable iterator pointing to the end of the reversed map.
Definition: MultiMap.hpp:1091
ReverseEntryIterator getEntriesReverseBegin()
Returns a mutable iterator pointing to the beginning of the reversed map.
Definition: MultiMap.hpp:1077
std::size_t removeEntries(const Key &key)
Removes all entries with the specified key from the map.
Definition: MultiMap.hpp:899
StorageType & getData()
Returns a non-const reference to the underlying map storage.
Definition: MultiMap.hpp:739
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:810
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:887
ConstEntryIterator begin() const
Returns a constant iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1042
KeyCompFunc getKeyCompareFunction() const
Returns the key compare function used by the map.
Definition: MultiMap.hpp:776
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:803
virtual const char * getClassName() const
Returns the name of the (derived) Map class.
Definition: MultiMap.hpp:1097
bool isEmpty() const
Tells whether the map is empty (getSize() == 0).
Definition: MultiMap.hpp:758
ConstEntryIterator getEntriesBegin() const
Returns a constant iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1014
EntryIterator begin()
Returns a mutable iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1049
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:993
Value & operator[](const Key &key)
Returns a non-const reference to the first value associated with the specified key.
Definition: MultiMap.hpp:869
EntryIterator getEntriesEnd()
Returns a mutable iterator pointing to the end of the map.
Definition: MultiMap.hpp:1035
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:857
ConstEntryIterator end() const
Returns a constant iterator pointing to the end of the map.
Definition: MultiMap.hpp:1056
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:764
EntryIterator getEntry(const Key &key)
Returns a mutable iterator pointing to the first entry with the specified key.
Definition: MultiMap.hpp:789
EntryIterator getEntriesBegin()
Returns a mutable iterator pointing to the beginning of the map.
Definition: MultiMap.hpp:1021
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