如何在random_shuffle后保持部分元素顺序

   2024-09-30 3100
核心提示:random_shuffle 函数是 C++` 库中的一个函数,用于对容器中的元素进行随机排序#includeiostream#includevector#includealgorithm

random_shuffle 函数是 C++` 库中的一个函数,用于对容器中的元素进行随机排序

#include<iostream>#include<vector>#include<algorithm>#include <ctime>#include <cstdlib>int main() {    std::srand(std::time(0)); // 初始化随机数生成器    std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};    // 定义需要保持顺序的元素范围    int start = 2;    int end = 5;    // 对 [start, end) 范围内的元素进行随机排序    std::random_shuffle(nums.begin() + start, nums.begin() + end);    // 输出结果    for (int num : nums) {        std::cout<< num << " ";    }    std::cout<< std::endl;    return 0;}

在这个示例中,我们创建了一个包含 1 到 9 的 std::vector。然后,我们使用 std::random_shuffle 函数对索引 2(包含)到 5(不包含)之间的元素进行随机排序。注意,std::random_shuffle 已被弃用,建议使用 std::shuffle 函数代替。

为了实现类似的功能,你可以使用 std::shuffle 函数,并将需要保持顺序的元素范围排除在外:

#include<iostream>#include<vector>#include<algorithm>#include <ctime>#include <cstdlib>#include<random>int main() {    std::random_device rd; // 用于生成随机种子    std::mt19937 g(rd()); // 使用 Mersenne Twister 算法的随机数生成器    std::vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};    // 定义需要保持顺序的元素范围    int start = 2;    int end = 5;    // 对 [0, start) 和 [end, nums.size()) 范围内的元素进行随机排序    std::shuffle(nums.begin(), nums.begin() + start, g);    std::shuffle(nums.begin() + end, nums.end(), g);    // 输出结果    for (int num : nums) {        std::cout<< num << " ";    }    std::cout<< std::endl;    return 0;}

在这个示例中,我们使用了 std::shuffle 函数,并将需要保持顺序的元素范围排除在外。这样,只有指定范围之外的元素会被随机排序,而指定范围内的元素将保持原来的顺序。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号