Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Qui (http://www.cppreference.com/cppalgorith ... uffle.html) ho trovato un algoritmo che mi serve: ho una lista di tot elementi e vorrei che questi venissero ordinati pseudo-casualmente (non mi interessa molto la vera e propria casualità).
Ho provato così:
/usr/include/c++/4.1.3/bits/stl_algo.h: In function ‘void std::random_shuffle(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std::_List_iterator<int>]’:
Tabella.cpp:58: instantiated from here
/usr/include/c++/4.1.3/bits/stl_algo.h:1905: error: no match for ‘operator+’ in ‘__first + 1’
Tabella.cpp:58: instantiated from here
/usr/include/c++/4.1.3/bits/stl_algo.h:1906: error: no match for ‘operator-’ in ‘__i - __first’
make: *** [Tabella.o] Error 1
Quindi non ho sbagliato io, ma chi ha scritto la funzione? Oppure devo usare vectors e non posso con le liste?
No, da repository (Ubuntu).
Comunque ho risolto con le deque (ho visto qui che è la più completa) al posto della list. Con questa non ho più quel problema.
Ma ora vorrei poter avere una permutazione più casuale. Evidentemente la casualità viene inizializzata sempre nello stesso modo, perché si ottiene sempre lo stesso risultato.
Se volete un po' di codice, ma ci vorrà un po' di spazio per spiegarvelo. Ho derivato una classe dai bitset<961> per aggiungere qualche metodo.
La lista ti viene ordinata sempre allo stesso modo perchè devi inizializzare il generatore di numeri random con un seed diverso ogni volta.
Se usi rand() l'initializzatore è srand(long int seed), altrimenti (scelta consigliata) per drand48 c'è srand48(long int seed). Una tecnica comune consiste nell'inizializzare il generatore con l'ora di sistema cosicchè avrai una lista diversa per ogni secondo del giorno. Ad esempio
se quelle sono le funzioni utilizzate da random_shuffle(), ogni volta che usi un seed diverso per l'inizializzazione dovresti avere sequenze casuali completamente diverse (o meglio scorrelate).