If you don't want to use 'dynamic memory' then, why do you use
std::vector? It also allocates the objects dynamically.
I would advise you against the pairing of sf::Sprite and
sf::Texture.
sf::Texture is a resource = heavy object and should be handled with care, while the sprite is a very light object.
But in case you really have to/want to/need to, you can simply use a
std::unique_ptr:
std::vector< std::pair< sf::Sprite , std::unique_ptr<sf::Texture> > > states;
Btw having two variables with nearly the same names (
states vs
states_) is a bit misleading.