Sto cercando un metodo efficiente per selezionare l'accesso a ciascun elemento di un std::vector<T>
in un ordine casuale, senza rimescolare o copiarli cioè nessun uso di std::random_shuffle
e assicurati che ogni elemento sia selezionato una sola volta.Metodo efficiente per selezionare in modo casuale tutti gli elementi di un vettore std :: esattamente una volta senza rimpasto
Non voglio copiare o rimescolare come a) ogni istanza di T
è probabile che sia un oggetto molto grande eb) per altre operazioni che farò sugli elementi del vettore, è più facile per loro rimanere nello stesso ordine.
Inoltre, in realtà non voglio andare per strada a raccogliere e rifiutare continuamente duplicati. Probabilmente avrò molti di questi oggetti di grandi dimensioni memorizzati nel vettore e l'efficienza è fondamentale, poiché cercherò di chiamare questo metodo di selezione casuale molte volte al secondo.
È possibile implementare un metodo di scambio per il proprio tipo? Se l'implementazione della libreria standard utilizza la ricerca dipendente dall'argomento per lo scambio (dovrebbe), allora si otterrà lo scambio degli elementi nel vettore con "O (1)". –