The evolution paths for a species are listed in the PBS files "pokemon.txt" and "pokemon_forms.txt" as a series of comma-separated triplets. Each triplet describes one evolution branch, and contains the following information:
Beyond these, there are two common move-type abuses: the fact that Thunder and Hurricane became 100% accurate in the rain! Dragonite is a common Pokémon to make abuse of these two, but it would be best to divvy those two moves up to suitable Pokémon. Aside from your essentials in Politoed and Armaldo, you can give Thunder to many Electric pokemon and Hurricane to some Flying Pokémon.
Note that contrary to your code, all variables here strictly follow camelCase, whereas your code contained Gender. Also notice that in class objects the members are usually prefixed with m_, suffixed with _ or follow another naming convention. Since you want to use it without encapsulation and all public (e.g. pokemon.type) prefixes or suffixes would make your code harder to read here.
There are two things I'm not fond of here. First of all, you only use the names "bulbasaur" or "ivysaur" once later, in std::vector pokemon, so you're polluting the local namespace. Instead, fill your vector directly:
First of all, before you implement your class, ask yourself more questions: Can you easily test for (pokemon) types? Do you often test for them? Should that be in its own function? Do you test for names? Do you need to normalize names? More than once? Do the Pokemon's types need to be ordered?
f448fe82f3