diff options
Diffstat (limited to 'include/multimapwdef.h')
-rw-r--r-- | include/multimapwdef.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/include/multimapwdef.h b/include/multimapwdef.h new file mode 100644 index 0000000..89b79a9 --- /dev/null +++ b/include/multimapwdef.h @@ -0,0 +1,39 @@ +#ifndef MULTIMAPWDEF +#define MULTIMAPWDEF + +#include <map> + +SWORD_NAMESPACE_START + +// multmap that still lets you use [] to reference FIRST +// entry of a key if multiples exist +template <class Key, class T, class Compare> +class multimapwithdefault : public std::multimap<Key, T, Compare> { +public: + typedef std::pair<const Key, T> value_type; + T& getWithDefault(const Key& k, const T& defaultValue) { + if (find(k) == this->end()) { + insert(value_type(k, defaultValue)); + } + return (*(find(k))).second; + } + + T& operator[](const Key& k) { + if (find(k) == this->end()) { + insert(value_type(k, T())); + } + return (*(find(k))).second; + } + bool has(const Key& k, const T &val) const { + typename std::multimap<Key, T, Compare>::const_iterator start = lower_bound(k); + typename std::multimap<Key, T, Compare>::const_iterator end = upper_bound(k); + for (; start!=end; start++) { + if (start->second == val) + return true; + } + return false; + } +}; + +SWORD_NAMESPACE_END +#endif |