Probléme Tableau associatif a 3 champs

jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011 - 26 déc. 2009 à 15:11
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011 - 26 déc. 2009 à 16:38
Bonjour,

Je suis en train de crée un petit programme serveur => client et j'ai maintenant besoin de stocker le nom d'utilisateur avec la socket qui lui appartient.

J'ai donc pensé a crée un tableau associatif dans ce style :

1 user1 numéro_socket
2 user2 numéro_socket

Le problème c'est que avec std::map je ne peut mètre 3 champs et que les tableau multidimensionnel je n'arrive pas a le faire avec des char.

je pense que vous n'aurait pas de mal a me dire comment faire mais je débute et je commence a désespérer ^^

Merci d'avance

Jérémy

7 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
26 déc. 2009 à 15:35
Bonjour, peux-tu préciser ton problème ? Je n'ai pas compris grand chose.

Si tu veux associer un utilisateur à deux informations, il suffit de l'associer à une paire: "std::map<std::string, std::pair > >"
Si tu veux l'associer à plusieurs informations, alors il te faut créer ton propre conteneur ou utiliser un boost::tuple.
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
26 déc. 2009 à 15:49
j'ai regarder du coté de std::pair mais après j'ai un problème pour récupérer les valeur.

En gros j'ai mon serveur, pour chaque client il crée un thread. le problème est que chaque thread dois pouvoir faire un send au autre utilisateur et donc connaitre leur socket.

je me suis donc dit que si a chaque thread utilisateur crée je rentré dans un tableau les information néssaire cela résoudrai ce problème.

donc le tableau aurait un nom du style tableau[1] avec comment valeur nom d'utilisateur et numéro du socket.

donc voila tableau[1] aurait comme première valeur un char et en seconde un int mais il me faut qu'il soit identifier par un int (donc la le 1) pour me permettre un envoie a tous les utilisateur par une simple boucle qui incrémente a chaque passage.

Même la cela ne dois pas être très précis… comme je vous est dit je débute et j’ai moi même du mal a mi retrouver.

jérémy
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
26 déc. 2009 à 15:53
Pour faire simple il me faut faire comme un array en php


jérémy
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
26 déc. 2009 à 15:57
Il te faut alors un std::vector. C'est la chose la plus proche de l'array du php.

Du genre: std::vector<std::pair<std::string, int> > tab;
(avec std::string pour le nom de l'utilisateur, et int pour le numéro du socket).

Pour l'utiliser:
tab[numéro] = std::make_pair("Toto", 90);
std::cout << tab[numéro].first << " " << tab[numéro].second << std::endl;
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
26 déc. 2009 à 16:10
J'ai oublié de préciser, pour faire un:
tab[numéro] = std::make_pair("Toto", 90);


Il faut que la case au numéro indiqué existe.
Si tu veux le créer à la volée, utilise:

tab.push_back(std::make_pair("Toto", 90));


qui veut dire le mettre à la fin de la liste et l'agrandir de un automatiquement ;)
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
26 déc. 2009 à 16:21
Je comprenne pas pourquoi j'avait une méchante erreur :p

C’est exactement ce qu'il me faut puis sa a l'air asser simple a utiliser :)

Dernière choses d'on j'ai besoin et après j’aurais tous ce qu'il me faut.

Comment effacer une ligne?

j'ai vus tab.erase() mais que faut t'il mettre comme argument pour sélectionner la ligne?

en tous cas un grand merci cela marche trés bien

jérémy
0
jerem3000 Messages postés 52 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 7 décembre 2011
26 déc. 2009 à 16:38
j'ai trouver:

tab.erase( tab.begin());

encore merci


jérémy
0
Rejoignez-nous