/* * dict: T -> S map * (C) Porkolab Zoltan, ELTE, Budapest, Hungary * (C) 1998 */ #include <map> template <class T> struct bad_index { bad_index(const T& index) : m_index(index) { } T index() { return m_index; } T m_index; }; template <class T, class S> class dict { public: S get( T t) const; void put( T t, S s); S& operator[]( T t) { S s = get(t); return m[t]; } S operator[]( T t) const { return get(t); } private: typename std::map<T,S> m; }; template <class T, class S> void dict<T,S>::put(T t, S s) { m[t] = s;^M } template <class T, class S> S dict<T,S>::get(T t) const {^M std::map<T,S>::const_iterator i = m.find(t); if( i != m.end() ) { return i->second; } else { throw bad_index<T>(t); } }