向量的随机访问

cod*_*der 2 c++ random vector

我有一个 C++ 向量,它已排序数据,我想以随机顺序访问数据以对数据进行洗牌。rand 的问题是可以同时访问两个索引,并且当最后一项保留时,将会有很多不需要的查找。有什么建议。

mol*_*ilo 5

如果您不想修改原始数据并且只访问每个元素一次,您可以对索引向量进行打乱:

#include <algorithm>
#include <random>


auto engine = std::default_random_engine{};
const std::vector<int> numbers = {4, 5, 7, 12};
std::vector<int> indices(numbers.size());
std::iota(indices.begin(), indices.end(), 0);
std::shuffle(indices.begin(), indices.end(), engine);
for (auto i : indices)
{
    std::cout << numbers[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

  • 好答案。可能比我的好。:) +1 (2认同)