从另一个向量制作随机配对向量
making a random paired vector from another single vector
// attender list, PID
std::vector<DWORD> m_vec_attender{1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119};
// duel list, PID <> PID
std::vector <DWORD, DWORD> m_vec_duelList;
我想从另一个向量(DWORD)创建一个随机向量对(DWORD,DWORD)并迭代配对的向量(决斗列表)。在上面的例子中,有 9 个玩家 ID。我想让这 8 名玩家随机配对,并将未配对的玩家留在第一个向量中(用于以后配对;"下一轮"),并从第一个向量中删除这 8 个玩家 ID。据我所知;std::make_pair 并在 C++11 中获取矢量 std::next 中的下一个元素,但我很困惑,似乎有很多方法可以完成这项工作,但我找不到任何与我的问题相关的可靠答案。提前谢谢..
为了解决你的问题,你应该首先创建一个原始向量的副本(如果你仍然需要它)并随机洗牌它:
auto atten_rand = m_vec_attender;
std::shuffle(atten_rand.begin(), atten_rand.end());
随机洗牌后,您现在可以按顺序配对它们。您的目标载体应声明为:
std::vector<std::pair<DWORD, DWORD>> m_vec_duelList;
现在您可以做到:
for (int i = 0; i != 4; ++i) {
m_vec_duelList.emplace_back(atten_rand[2*i], atten_rand[2*i+1]);
}
请注意,默认情况下,std::shuffle
通常使用rand
底层进行随机性,这不是一个非常高质量的随机数生成器。这可能适合快速生成平局,但如果您有更高的随机性需求,您应该更详细地调查它。
相关文章:
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 指向用随机指针归档的其他类对象的指针的c++向量
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- C++ 生成随机向量
- 随机访问元组向量中的元组值
- 将一个随机的字符序列和int序列解析为单独的向量
- 从C++向量中随机选取
- C++线程的向量在连接时随机崩溃
- C 从向量的子集返回一个随机值
- 使用随机值初始化 2D 向量
- 多次随机向量后的读取访问冲突
- 随机采样C++中具有权重的元组的向量
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- 从另一个向量制作随机配对向量
- 使用 std::find 在向量中定位随机生成的数字
- 创建一个随机的std ::向量,其中一个和零C
- 尝试创建随机整数向量时的OpenMPI编译器错误
- 如何从向量中获取随机和唯一值?
- 使用 和 函数生成随机双向量<random>