List 随机遍历庞大列表的理想方法?
我有一个庞大的数字列表(数千万),我想以随机顺序不重复地浏览它们 < C++ > C++中java、python?< p>有一个有效的方法,这可能是:List 随机遍历庞大列表的理想方法?,list,List,我有一个庞大的数字列表(数千万),我想以随机顺序不重复地浏览它们 < C++ > C++中java、python?< p>有一个有效的方法,这可能是: std::list<T> foo; std::vector<T *> bar(foo.size()); std::transform(foo.begin(), foo.end(), bar.begin(), [](T &a) -> T * { return &a;
std::list<T> foo;
std::vector<T *> bar(foo.size());
std::transform(foo.begin(), foo.end(), bar.begin(),
[](T &a) -> T *
{
return &a;
});
std::random_shuffle(bar.begin(), bar.end());
for (auto &one_bar: bar)
do_whatever(*one_bar);
假设您的类定义了这些运算符。您的意思是不希望同一个数字在一行中重复两次或完全删除重复项?按值或索引不重复?这如何避免重复?按定义不重复。看,我看不到任何明显的链接,可以解释为什么你没有重复。如果我有
[1,3,4,2,1,3,4,5,6]
那会发生什么?好的,我已经更新了答案,添加了删除重复项。
std::list<T> foo;
std::vector<T *> bar(foo.size());
std::transform(foo.begin(), foo.end(), bar.begin(),
[](T &a) -> T *
{
return &a;
});
std::sort(bar.begin(), bar.end(),
[](T *a, T *b) -> bool
{
return *a > *b;
});
std::unique(bar.begin(), bar.end(),
[](T *a, T *b) -> bool
{
return *a == *b;
});
std::random_shuffle(bar.begin(), bar.end());
for (auto &one_bar: bar)
do_whatever(*one_bar);