The pointer should be find. `vehicle_part_types` is never changed and so is `part_type_iterator` which points into `vehicle_part_types`.

`push_back` and `insert` will make a copy anyway. Which is btw. another useless thing. The map of defined vehicle parts will never change during the vehicle interaction.

The problem (and the crash) is actually caused by the iterator. Inserting an element (into `can_mount`) invalidates the iterator. As the vector is changed at two places, the iterator has to be updated after both insertations (push_back is an insertation, too). Using the index is easier: `insert(can_mount.begin() + can_mount_divider_index++, ...`