Я ищу эффективный метод выбора доступа к каждому элементу std::vector<T>
в случайном порядке без перестановки или копирования, т.е. без использования std::random_shuffle
и убедитесь, что каждый элемент выбран только один раз.Эффективный метод случайного выбора всех элементов std :: vector ровно один раз БЕЗ перетасовки
Я не хочу копировать или перетаскивать, так как каждый экземпляр T
, вероятно, будет очень большим объектом и б) для других операций, которые я буду выполнять над элементами вектора, им легче оставаться в том же порядке.
Кроме того, я действительно не хочу идти по улице, постоянно собирать и отклонять дубликаты. Вероятно, у меня будет много этих больших объектов, хранящихся в векторе, и эффективность является ключевой, так как я буду искать вызов этого метода случайного выбора много раз в секунду.
Можете ли вы реализовать метод подкачки для вашего типа? Если стандартная реализация библиотеки использует зависящий от аргумента поиск для swap (он должен), вы получите 'O (1)' замену элементов в векторе. –