c++ - 如何从随机值范围中删除某个元素?

标签 c++

我正在尝试为几个团队随机生成一个双循环计划,以团队为线,以回合为列。每支球队被安排为与其他球队对决两次,一次为主场比赛的对手分配正值,一次为客场负值。

该代码将类似于以下内容,除了它适用于2D数组而不是1D,其中从2D的每一行的element(team,round)元素的可能随机值中删除了某些“K”和“-K”数组,而不是固定值。

K是确保团队不匹配的#行(例如,在分配第2行时使k = +-2在“dist {}”中的权重= 0,因此不会出现“2”和“-2” (作为第2队为自己(主场或客场)分配的对手),但此移除不应是永久的,因为在日程表数组的其他行中,第#K队是有效的对手。

是否有一项功能可以让每条线(团队)的随机数取不同的k?还是可以用srand()来做?

#include <functional>
#include <iostream>
#include <ostream>
#include <random>

int main()
{
std::random_device rd;

unsigned long seed = rd();
std::cout << "seed " << seed << std::endl;

std::mt19937 engine(seed);

// Distribution  {0, 1, 2, 4, 5}
std::discrete_distribution<> dist {{1, 1, 1, 0, 1, 1}};  // 3 given 0 weight(chance).
auto rng = std::bind(dist, std::ref(engine));

const int n = 10;
for (int i = 0; i != n; ++i)
{
    int x = rng();
    std::cout << x << std::endl;
}

return 0;
}

最佳答案

我想你要这个

std::discrete_distribution<> make_dist(int k, int N)
{
    std::vector<int> dist(N,1);
    dist.at(k) = 0;
    return std::discrete_distribution<>(dist.begin(), dist.end());
}

更换你的

std::discrete_distribution<> dist {{1, 1, 1, 0, 1, 1}};  // 3 given 0 weight(chance).



auto dist = make_dist(3,6);

关于c++ - 如何从随机值范围中删除某个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60658736/

相关文章:

c++ - C/C++ 中的函数式编程?

c++ - 获取蒙版纹理的 OpenGL 直方图

c++ - GDB strace 显示它尝试在无效地址进行 ptrace

c++ - D3D9 Direct3DCreate9() 链接器错误,但所有其他 D3D 函数都有效

c++ - 类对象状态机的类设计思路

c++ - 函数签名作为函数模板参数

c++ - Google 测试 - 将数组作为 void* 参数进行比较

c++ - 迭代器不兼容错误

javascript - array[array.length] = value 在 JavaScript 中完成了什么?

c++ - 如何启用 MongoDB C++ 驱动程序自动重新连接功能?