Поскольку B является производным от A, вектор v будет содержать указатели на структуры базового класса объекта b. следовательно, вы можете получить доступ к членам A, т.е.
std::cout << v[0].first->a;
EDIT:
Моя ошибка, как указано ниже, вы все равно можете приводить к указателям типа B, поскольку вектор состоит из указателей, а не объектов, поэтому срезы объектов не происходили.
вызов, такой как
std::cout << v[0].first->b;
не будет компилироваться, поскольку элементы в векторе являются указателями базового класса и не могут указывать на производные члены класса без приведения, то есть
std::cout << static_cast<B*>(v[0].first)->b;
Также обратите внимание, что динамическое приведение, как в
std::cout << dynamic_cast<B*>(v[0].first)->b;
не скомпилируется со следующей ошибкой в gcc:
cast.cpp:14: error: cannot dynamic_cast ‘v.std::vector<_Tp, _Alloc>::operator[] [with _Tp = std::pair<A*, A*>, _Alloc = std::allocator<std::pair<A*, A*> >](0u)->std::pair<A*, A*>::first’ (of type struct A*’) to type struct B*’ (source type is not polymorphic)