2017-01-16 3 views
0
// 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 и получить следующий элемент в векторе std :: next в C++ 11, но я так смущен, кажется, что есть много способов сделать эту работу, но я не смог найти надежного ответа связанных с моим вопросом. Заранее спасибо ..создание случайного парного вектора из другого отдельного вектора

+2

Начать с 'std :: vector > m_vec_duelList' – AndyG

+0

Проблема заключается в том, что первый элемент соединяется со следующим ... – Liveth

+0

Следующая вещь - подумать о том, как вы напишите цикл, который мог бы получить доступ к одному элементу в векторе, а также в следующем. Убедитесь, что вы не выходите за пределы. Убедитесь, что вектор имеет «соответствующее» количество элементов. – AndyG

ответ

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, лежащий в основе случайности, которая не является очень высокое качество случайных чисел генератор. Вероятно, это хорошо, чтобы быстро создать ничью, но если у вас есть более высокие потребности в случайности, вы должны более подробно изучить это.

+0

благодарю вас за интересный мой вопрос как первый. В вашем ответе, что происходит с непарным? – Liveth

+0

@ noname005 Ничего подобного не происходит. Как видно из кода, поскольку он перемещает рандомизированный список с самого начала, неспаренные элементы будут просто последним элементом рандомизированного списка. Таким образом, вы можете получить/просмотреть его с помощью 'atten_rand.back()'. –

+0

Я получаю эту ошибку в VS; http://prntscr.com/dwghng – Liveth

 Смежные вопросы

  • Нет связанных вопросов^_^