No, you can't.
The original idea with allocators was that they could define objects for pointers and reference types to the data. However, that's not really allowed anymore; allocator<T>::pointer
must be T*
, and containers are freely allowed to assume that it is.
So if you truly need a vector to use some kind of compact pointer representation or something, you're going to have to implement one yourself.
The standard library containers are good defaults for most uses. But for those with specialized needs, you may have to replace them with something else. That would appear to be the case here.