下标池 IdPool
template<typename T>
struct IdPool {
map<T, int> idmap;
vector<T> items;
void clear() { idmap.clear(); items.clear(); }
int getid(const T &t) {
auto it = idmap.find(t);
if (it != idmap.end()) return it->second;
int ans = items.size(); items.push_back(t); idmap[t] = ans; return ans;
}
T& operator[](int i) { return items[i]; }
int size() { return items.size(); }
};
IdPool<int> idp;
Next: 《C++ Primer》 拾遗 第 14 章 重载运算与类型转换