// 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个玩家并将未配对的玩家留在第一个向量(以便以后配对;&#39;下一轮&#39;)并删除这8个玩家ID&#39 ; s 来自第一个向量。我所知道的; std :: make_pair 并在C ++ 11中获取向量 std :: next 中的下一个元素但是我很困惑,似乎有很多方法可以做这个工作,但我找不到任何与我的问题相关的可靠答案。提前谢谢..
答案 0 :(得分:0)
要解决您的问题,您应该首先创建原始矢量的副本(如果您仍然需要它)并随机改组它:
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
底层随机性,这不是一个非常高质量的随机数生成器。这可能很好地快速生成抽奖,但如果你有更高的随机性需求,你应该更详细地研究它。