#ifndef IDSET_H #define IDSET_H #include template class IDSet { public: IDSet() { m_next_index = 1; } int add(const T & o) { int id = m_next_index++; m_data[id] = o; return id; } void erase(int id) { m_data.erase(id); } T & operator[](int id) { return m_data[id]; } bool contains(int id) { return m_data.find(id) != m_data.end(); } bool empty() { return m_data.empty(); } typename std::map::iterator begin() { return m_data.begin(); } typename std::map::iterator end() { return m_data.end(); } protected: std::map m_data; int m_next_index; }; #endif