On range dans un tableau 8 entiers générés aléatoirement par l'ordi. coment faire pour être sur que chaque nombre généré soit uniquen c'est à dire qu'il n'y a pas 2 nbrs identiques générés.
Le plus simple (et légèrement mieux que comparer chaque nombre à tous les autres) :
bool tous_differents = true;
static const unsigned int TAILLE = 8;
int tableau[TAILLE];
for(unsigned int i = 0; tous_differents && i != TAILLE-1; ++i)
{
for(unsigned int j = i+1; tous_differents && j != TAILLE; ++j)
{
tous_differents = (tableau[i] != tableau[j]);
}
}
(attention : je n'ai pas testé ce programme, c'est juste une idée qui me passe par la tête)
Effectivement, mieux vaut utiliser la STL.
Cependant, je ne vois pas pourquoi tu proposes une map, puisque l'on gère des valeurs simples et non pas des paires clé/valeur. En plus, un std::map ne permet pas de multiples valeurs pour une même clé (il faudrait alors un std::multimap). Pour répondre spécifiquement au problème, sans doute vaudrait-il mieux un std::multiset.
Par ailleurs, le choix ne dépend pas de la recherche que l'on veut faire (qui n'est apparemment qu'une validation de données) mais de l'utilisation de ces données. En effet, si std::multiset semble adapté au problème de validation, il risque fort de ne pas l'être pour l'utilisation ultérieur du fait que l'on perd ici l'ordonnancement des données.
Voyons ainsi comment tranposer l'algorithme (avec une petite différence pour les pointilleux observateurs) en utilisant un std::vector. Cet exemple permet de voir l'utilisation d'une fonction d' plutôt que les méthodes spécifiques à std::multiset, comme std::multiset::equal_range qui semblerait assez adaptée si on avait choisit ce type collection. De plus, ce code a l'avantage d'être assez indépendant de la collection choisie (comptons donc le nombre de retouches à faire si on change le std::vector en une autre collection à éléments simples, comme std::list ou std::deque...)