Chemical Data Processing Library C++ API - Version 1.4.0
MultiMap.hpp
Go to the documentation of this file.
1 /*
2  * MultiMap.hpp
3  *
4  * This file is part of the Chemical Data Processing Toolkit
5  *
6  * Copyright (C) 2003 Thomas Seidel <thomas.seidel@univie.ac.at>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this library; see the file COPYING. If not, write to
20  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23 
29 #ifndef CDPL_UTIL_MULTIMAP_HPP
30 #define CDPL_UTIL_MULTIMAP_HPP
31 
32 #include <map>
33 #include <functional>
34 #include <utility>
35 #include <string>
36 #include <cstddef>
37 #include <memory>
38 
39 #include "CDPL/Base/Exceptions.hpp"
40 
41 
42 namespace CDPL
43 {
44 
45  namespace Util
46  {
47 
53  template <typename ValueType, bool Allow = true>
55  {
56 
61  static const ValueType& get()
62  {
63  return defValue;
64  }
65 
69  static const ValueType defValue;
70  };
71 
72  template <typename ValueType, bool Allow>
73  const ValueType MultiMapDefaultValue<ValueType, Allow>::defValue = ValueType();
74 
79  template <typename ValueType>
80  struct MultiMapDefaultValue<ValueType, false>
81  {
82 
88  static const ValueType& get()
89  {
90  throw Base::OperationFailed("MultiMap: default value not supported");
91  }
92  };
93 
114  template <typename Key, typename Value, bool AllowDefValues = false,
115  typename KeyCompFunc = std::less<Key> >
116  class MultiMap
117  {
118 
119  typedef std::multimap<Key, Value, KeyCompFunc> StorageType;
120 
121  public:
125  typedef std::shared_ptr<MultiMap> SharedPointer;
126 
130  typedef Key KeyType;
131 
135  typedef Value ValueType;
136 
143  typedef typename StorageType::value_type Entry;
144 
148  typedef typename StorageType::const_iterator ConstEntryIterator;
149 
153  typedef typename StorageType::const_reverse_iterator ConstReverseEntryIterator;
154 
158  typedef typename StorageType::iterator EntryIterator;
159 
163  typedef typename StorageType::reverse_iterator ReverseEntryIterator;
164 
168  typedef typename std::pair<EntryIterator, EntryIterator> EntryIteratorRange;
169 
173  typedef typename std::pair<ConstEntryIterator, ConstEntryIterator> ConstEntryIteratorRange;
174 
179  data() {}
180 
185  MultiMap(const KeyCompFunc& func):
186  data(func) {}
187 
193  template <typename InputIter>
194  MultiMap(const InputIter& first, const InputIter& last):
195  data(first, last)
196  {}
197 
205  template <typename InputIter>
206  MultiMap(const InputIter& first, const InputIter& last, const KeyCompFunc& func):
207  data(first, last, func)
208  {}
209 
213  virtual ~MultiMap() {}
214 
219  StorageType& getData();
220 
225  const StorageType& getData() const;
226 
231  std::size_t getSize() const;
232 
237  bool isEmpty() const;
238 
242  void clear();
243 
248  void swap(MultiMap& map);
249 
254  KeyCompFunc getKeyCompareFunction() const;
255 
261  std::size_t getNumEntries(const Key& key) const;
262 
275 
287  ConstEntryIteratorRange getEntries(const Key& key) const;
288 
299  EntryIterator getEntry(const Key& key);
300 
311  ConstEntryIterator getEntry(const Key& key) const;
312 
327  Value& getValue(const Key& key);
328 
343  Value& getValue(const Key& key, Value& def_value);
344 
360  const Value& getValue(const Key& key) const;
361 
376  const Value& getValue(const Key& key, const Value& def_value) const;
377 
389  Value& operator[](const Key& key);
390 
402  const Value& operator[](const Key& key) const;
403 
408  void removeEntry(const EntryIterator& it);
409 
414  bool removeEntry(const Key& key);
415 
421  void removeEntries(const EntryIterator& first, const EntryIterator& last);
422 
428  std::size_t removeEntries(const Key& key);
429 
436 
443  EntryIterator insertEntry(const Key& key, const Value& value);
444 
456  EntryIterator insertEntry(const EntryIterator& it, const Entry& item);
457 
471  EntryIterator insertEntry(const EntryIterator& it, const Key& key, const Value& value);
472 
484 
496  EntryIterator setEntry(const Key& key, const Value& value);
497 
507  template <typename InputIter>
508  void insertEntries(const InputIter& first, const InputIter& last);
509 
520  template <typename InputIter>
521  void setEntries(const InputIter& first, const InputIter& last);
522 
528  EntryIterator getLowerBound(const Key& key);
529 
535  ConstEntryIterator getLowerBound(const Key& key) const;
536 
542  EntryIterator getUpperBound(const Key& key);
543 
549  ConstEntryIterator getUpperBound(const Key& key) const;
550 
556 
562 
568 
574 
580 
586 
592 
598 
604 
610 
616 
622 
623  protected:
651  virtual const char* getClassName() const;
652 
653  private:
654  const Value& getDefaultValue() const;
655 
656  StorageType data;
657  };
658 
667  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
670 
679  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
682 
691  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
694 
703  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
706 
715  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
718 
727  template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
730 
731  } // namespace Util
732 } // namespace CDPL
733 
734 
735 // Implementation
736 
737 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
738 typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
740 {
741  return data;
742 }
743 
744 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
745 const typename CDPL::Util::MultiMap<Key, Value, AllowDefValues, KeyCompFunc>::StorageType&
747 {
748  return data;
749 }
750 
751 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
753 {
754  return data.size();
755 }
756 
757 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
759 {
760  return data.empty();
761 }
762 
763 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
765 {
766  data.clear();
767 }
768 
769 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
771 {
772  data.swap(map.data);
773 }
774 
775 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
777 {
778  return data.key_comp();
779 }
780 
781 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
783 {
784  return data.count(key);
785 }
786 
787 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
790 {
791  return data.find(key);
792 }
793 
794 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
797 {
798  return data.find(key);
799 }
800 
801 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
804 {
805  return data.equal_range(key);
806 }
807 
808 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
811 {
812  return data.equal_range(key);
813 }
814 
815 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
817 {
818  EntryIterator lb = data.lower_bound(key);
819 
820  if (lb == data.end() || data.key_comp()(key, (*lb).first)) {
821  if (!AllowDefValues)
822  throw Base::ItemNotFound(std::string(getClassName()) + ": key not found");
823 
824  return (*data.insert(lb, Entry(key, getDefaultValue()))).second;
825  }
826 
827  return (*lb).second;
828 }
829 
830 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
832 {
833  EntryIterator it = data.find(key);
834 
835  if (it == data.end())
836  return def_value;
837 
838  return (*it).second;
839 }
840 
841 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
843 {
844  ConstEntryIterator it = data.find(key);
845 
846  if (it == data.end()) {
847  if (!AllowDefValues)
848  throw Base::ItemNotFound(std::string(getClassName()) + ": key not found");
849 
850  return getDefaultValue();
851  }
852 
853  return (*it).second;
854 }
855 
856 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
858  const Value& def_value) const
859 {
860  ConstEntryIterator it = data.find(key);
861 
862  if (it == data.end())
863  return def_value;
864 
865  return (*it).second;
866 }
867 
868 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
870 {
871  return getValue(key);
872 }
873 
874 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
876 {
877  return getValue(key);
878 }
879 
880 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
882 {
883  data.erase(it);
884 }
885 
886 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
888 {
889  EntryIterator it = data.find(key);
890 
891  if (it == data.end())
892  return false;
893 
894  data.erase(it);
895  return true;
896 }
897 
898 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
900 {
901  return data.erase(key);
902 }
903 
904 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
906  const EntryIterator& last)
907 {
908  data.erase(first, last);
909 }
910 
911 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
914 {
915  return data.insert(item);
916 }
917 
918 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
921 {
922  return data.insert(Entry(key, value));
923 }
924 
925 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
928 {
929  return data.insert(it, item);
930 }
931 
932 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
935  const Value& value)
936 {
937  return data.insert(it, Entry(key, value));
938 }
939 
940 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
943 {
944  EntryIterator lb = data.lower_bound(item.first);
945  EntryIterator end = data.end();
946 
947  if (lb == end || data.key_comp()(item.first, (*lb).first))
948  return data.insert(lb, item);
949 
950  EntryIterator range_end = lb;
951 
952  while (range_end != end && !data.key_comp()(item.first, (*range_end).first))
953  ++range_end;
954 
955  data.erase(lb, range_end);
956 
957  return data.insert(range_end, item);
958 }
959 
960 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
963 {
964  return setEntry(Entry(key, value));
965 }
966 
967 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
968 template <typename InputIter>
970  const InputIter& last)
971 {
972  data.insert(first, last);
973 }
974 
975 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
976 template <typename InputIter>
978  const InputIter& last)
979 {
980  for (InputIter it = first; it != last; ++it)
981  setEntry(*it);
982 }
983 
984 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
987 {
988  return data.lower_bound(key);
989 }
990 
991 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
994 {
995  return data.lower_bound(key);
996 }
997 
998 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1001 {
1002  return data.upper_bound(key);
1003 }
1004 
1005 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1008 {
1009  return data.upper_bound(key);
1010 }
1011 
1012 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1015 {
1016  return data.begin();
1017 }
1018 
1019 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1022 {
1023  return data.begin();
1024 }
1025 
1026 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1029 {
1030  return data.end();
1031 }
1032 
1033 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1036 {
1037  return data.end();
1038 }
1039 
1040 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1043 {
1044  return data.begin();
1045 }
1046 
1047 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1050 {
1051  return data.begin();
1052 }
1053 
1054 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1057 {
1058  return data.end();
1059 }
1060 
1061 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1064 {
1065  return data.end();
1066 }
1067 
1068 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1071 {
1072  return data.rbegin();
1073 }
1074 
1075 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1078 {
1079  return data.rbegin();
1080 }
1081 
1082 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1085 {
1086  return data.rend();
1087 }
1088 
1089 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1092 {
1093  return data.rend();
1094 }
1095 
1096 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1098 {
1099  return "MultiMap";
1100 }
1101 
1102 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1104 {
1106 }
1107 
1108 // \cond DOC_IMPL_DETAILS
1109 
1110 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1111 bool CDPL::Util::operator==(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1112  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1113 {
1114  return (map1.getData() == map2.getData());
1115 }
1116 
1117 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1118 bool CDPL::Util::operator!=(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1119  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1120 {
1121  return (map1.getData() != map2.getData());
1122 }
1123 
1124 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1125 bool CDPL::Util::operator<=(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1126  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1127 {
1128  return (map1.getData() <= map2.getData());
1129 }
1130 
1131 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1132 bool CDPL::Util::operator>=(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1133  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1134 {
1135  return (map1.getData() >= map2.getData());
1136 }
1137 
1138 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1139 bool CDPL::Util::operator<(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1140  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1141 {
1142  return (map1.getData() < map2.getData());
1143 }
1144 
1145 template <typename Key, typename Value, bool AllowDefValues, typename KeyCompFunc>
1146 bool CDPL::Util::operator>(const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map1,
1147  const MultiMap<Key, Value, AllowDefValues, KeyCompFunc>& map2)
1148 {
1149  return (map1.getData() > map2.getData());
1150 }
1151 
1152 // \endcond
1153 
1154 #endif // CDPL_UTIL_MULTIMAP_HPP
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