Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 随机遍历庞大列表的理想方法?_List - Fatal编程技术网

List 随机遍历庞大列表的理想方法?

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;

我有一个庞大的数字列表(数千万),我想以随机顺序不重复地浏览它们

< 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::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);