Rassembler les valeurs identique

bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   -  
paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tous le monde,
J'ai un fichier qui s'affiche comme:
1 9
3 7
12 65
1 4
5 6
11 98
12 22

je veux que mon programme m'affiche:
1 (9,4)
12(65,22)

Merci de m'aider s'il vous plait.

5 réponses

Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention   7 345
 
Bonjour,

C'est pour quand ?
1
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2
 
Si je peux l'avoir ce soir c'est bien.
0
Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention   7 345
 
0
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2 > Chris 94 Messages postés 54087 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'avais commencé à utiliser les structures.

struct CHInfo
{
 int src;
 int dest;
};

CHInfo rec;
rec.src = atoi(netPacket->getSource());
rec.dest = id;
CHcandidates.push_back(rec);


illustration:
rec.dest rec.src

1 9
3 7
12 65
1 4
5 6
11 98
12 22

il faut que je parcourt la colonne rec.dest et recupérer les valeur qui viennent au moins deux fois et de les afficher avec leurs correspondances du colonne 2:
1 (9,4)
12(65,22)
0
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai pensé à utiliser les liste chainée ou vector, mais j'y arrive pas.
0
ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Je propose d'utiliser un
std::map<int, std::vector<int>>
, ou un
std::map<int, std::set<int>>
si les valeurs de la 2e colonne sont uniques par rapport à la valeur de la 1ère colonne.
0
paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   25
 
https://forums.commentcamarche.net/forum/affich-33575444-afficher-le-contenu-des-cellules-identique-dans-un-tableau-en-c

Visiblement la seule différence entre les deux sujets est le language, du C au C++...

La curiosité est une excellente qualité !
0

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

Posez votre question
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

En C++, c'est beaucoup plus simple qu'en C une utilisant la map<> qu'a proposé gravgun.
std::map<int,std::vector<int>>  donneesClassees;

// classer les éléments à partir de src, leur associer la liste des dest correspondantes
for ( auto const& rec : CHcandidate )
    donneesClassees[rec.src].push_back( rec.dest );

// il ne reste qu'à tracer chaque élément du dictionnaire qui a plusieurs dest
for ( auto const& itm : donneesClassees ) {
    if ( itm.second.size() > 1u ) { // plusieurs dest pour un src
        std::cout << itm.first << " (";
        for ( auto idst = itm.second.cbegin() ; ; )
            std::cout << *idst;
            if ( ++idst != itm.second.cend() )
                std::cout << " , ";  // séparateur avant le prochain
            else
                break;                   // dernier élément, on arrête
        }
        std::cout << " )\n";
    }
}
0
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci beaucoup de me répondre.
Dans le bout de code que vous m'avez donner Dalfab, il ne manque pas une accolade ouverte???
Vous avez mis plus d'accolade fermente que d'accolade ouverte.
0
paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   25
 
Oui, il manque une petite accolade ouvrante ligne 13, à la fin du for ;)
0
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2 > paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup!
0
bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention   2 > bayefalle Messages postés 122 Date d'inscription   Statut Membre Dernière intervention  
 
Si je compile, il m'affiche l'erreur suivant:
expected initializer befor ':' token

c'est dans les for
for ( auto const& rec : CHcandidate )
0
paly2 Messages postés 254 Date d'inscription   Statut Membre Dernière intervention   25
 
Peut-être que ton compilateur est trop vieux pour supporter les "range-based" for.

Essaie:
for (int i = 0 ; i < CHcandidate.size() ; i++)
    donneesClassees[CHcandidate[i].src].push_back( CHcandidate[i].dest );

Ou (au choix)
for (std::vector<int>::iterator rec = CHcandidate.begin() ; rec < CHcandidate.end() ; rec++)
    donneesClassees[rec->src].push_back( rec->dest );


Il faut aussi que tu fasses la modification pour la deuxième boucle for de ce type.

Note: j'ai horreur de
auto
.
0