I have an std::map<G4ParticleDefinition *, G4long>. If I use multi thread mode of G4, Does each run use the same memory or G4ParticleDefinition* ?
Yes. The G4ParticleDefinition pointers are in a shared global table; each one is effectively a singleton shared across all threads. I’d encourage you to use
const G4ParticleDefinition* in your map, just to be clear that the stored objects are not mutable.