もしindexが変わらんのであれば別にmap<shared_ptr<T>, int>持つとか
Tにindex持たせるとか