Форум программистов, компьютерный форум CyberForum.ru

Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 11:26     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #1
Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2012, 11:26     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера
Посмотрите здесь:

Есть процесс A и дочерний процесс B, который находит хэндл родительского процесса A. И этот хэндл в разных случаях РАЗНЫЙ! Почему? C++
Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? C++
C++ Есть ли возможность сызвать из C++ java class?
C++ Есть ли возможность выполнять цикл некоторое время
C++ Есть какая нибудь информация по созданию алгоритма или программы для автопилота
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 11:32     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #2
http://en.cppreference.com/w/cpp/alg...random_shuffle
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 11:51     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #3
Цитата Сообщение от ramybozy Посмотреть сообщение
Есть в библиотеке алгоритмов такой алгоритм, который случайным образом перемешивает элементы данного контейнера.
Все бы хорошо, но вот только в том, что он всегда перемешивает их одним и тем же образом.
Есть ли какая-нибудь возможность рандомизировать этот процесс?
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 12:43  [ТС]     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #4
Цитата Сообщение от nexen Посмотреть сообщение
Не понял. Имеешь ввиду, что, если на входе 1 2 3 4 5, то ты всегда получаешь, допустим, 3 2 5 4 1?
Да именно это я и имел в виду.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
16.07.2012, 12:46     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #5
Цитата Сообщение от ramybozy Посмотреть сообщение
Да именно это я и имел в виду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <vector>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <ctime>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
 
using namespace std;
//
void main()
{
    setlocale(0,"RUS");
    int mas[10];
    for (int i=0; i<5; ++i)
    {
        for (int j=0; j<10; ++j)
            mas[j] = j+1;
        random_shuffle(mas, mas+10);
        for (int j=0; j<10; ++j)
            printf("%d ", mas[j]);
        printf("\n");
    }
}
У меня каждый раз разные выдает
Попробуй у себя? (Не обращай внимание на библиотеки, у меня паттерн кода)
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:10  [ТС]     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #6
Да он то и будет выдавать ПОСЛЕДОВАТЕЛЬНО разные.
Но ты сам у себя проверь и убедись, что на 2-м, 3-м и так далее запуске у тебя генерируются точно такие же последовательности, что и на первом.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
16.07.2012, 13:32     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #7
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
C++
1
std::srand( std::time( 0 ));
std::srand() - <cstdlib>
std::time() - <ctime>
ramybozy
8 / 8 / 0
Регистрация: 01.07.2012
Сообщений: 138
16.07.2012, 13:46  [ТС]     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #8
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вы переходили по ссылке выше? Там же ясно написано, что перегрузка с двумя параметрами использует функцию std::rand(). Перед перемешиванием напишите
Нет, ну эта метода известна.
Тогда не стоит рыпаться с random_shuffle, а просто использовать функции rand и srand.
Речь идет именно о том, чтобы делать это средствами библиотеки шаблонов.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
16.07.2012, 13:55     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #9
ramybozy, используйте std::shuffle + std::mt19937. Код по ссылке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.09.2014, 15:33     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера
Еще ссылки по теме:

C++ Нужна какая-нибудь библиотека для распознавания речи под Windows
Какая-нибудь книга по STL, только чтобы с нуля и основательно C++
Есть ли в C++ возможность работы с метаданными класса/структуры? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
04.09.2014, 15:33     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int random(int min, int max)
{
    static bool flag;
    if (!flag)
    {
        srand(time(NULL));
        flag = true;
    }
    return min + rand() % (max - min);
}
 
template <typename T>
T* shuffle(T* dest, const T* source, const size_t size)
{
    memcpy(dest, source, size);
    for (int i = 0; i < size; i++)
    {
        int index = random(0,size-1);
        T tmp = dest[index];
        dest[index] = dest[i];
        dest[i] = tmp;
    }
    return dest;
}
Yandex
Объявления
04.09.2014, 15:33     Есть ли какая-нибудь возможность рандомизировать процесс перемешивания элементов контейнера
Ответ Создать тему
Опции темы

Текущее время: 13:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru