Я думаю, что самым безопасным было бы иметь второй вектор, содержащий индексы в первом векторе:
using std::vector;
vector<A> main;
vector<vector<A>::size_type> secondary;
main.push_back(...);
secondary.push_back(main.size() - 1); // add the index of the last item
Теперь, чтобы найти элемент, вы берете значение в качестве вторичного и используете его для индексации в main:
main[secondary[...]];
Причина, по которой я рекомендую это вместо того, чтобы просто хранить вторичный указатель прямого указателя, заключается в том, что каждый раз, когда вы добавляете в вектор, может потребоваться изменить размер вектора, что может сделать недействительными любые существующие указатели:
using std::vector;
vector<A> vec;
vec.push_back(A());
// get a pointer to the item you just added
A *p0 = &vec[0];
// add another item
a.push_back(A());
// because a push_back() can cause the vector to resize, p0 may no
// longer point to valid memory and cannot safely be dereferenced