template <class k, class t> struct multimap : public multiset<key_value<k, t>> { multimap() {} multimap(std::initializer_list<std::pair<k, t>> l) { for (std::pair<k, t> _t : l) insert(_t.first, _t.second); } void insert(const k& key, const t& data) { multiset<key_value<k, t>>::insert(key_value<k, t>(key, data)); } void erase(const k& key) { multiset<key_value<k, t>>::erase(key_value<k, t>(key)); } list<t> operator[](const k& key) const { list<key_value<k, t>> fl = multiset<key_value<k, t>>::find(key_value<k, t>(key)); list<t> ret; for (key_value<k, t> kv : fl) ret << kv.value; return ret; } multimap& operator>>(const k& key) { erase(key); return *this; } bool contains(const k& key) { return contains(key_value<k, t>(key)); } };