Rassembler les valeurs identique

Fermé
bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 - 15 juin 2016 à 19:06
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 - 16 juin 2016 à 21:05
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 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
15 juin 2016 à 19:10
Bonjour,

C'est pour quand ?
1
bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2
15 juin 2016 à 19:12
Si je peux l'avoir ce soir c'est bien.
0
Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023 7 325
15 juin 2016 à 19:12
0
bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2 > Chris 94 Messages postés 50978 Date d'inscription mardi 8 janvier 2008 Statut Modérateur Dernière intervention 17 février 2023
Modifié par Chris 94 le 15/06/2016 à 19:26
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 jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2
15 juin 2016 à 19:12
J'ai pensé à utiliser les liste chainée ou vector, mais j'y arrive pas.
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
15 juin 2016 à 19:44
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 vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 16/06/2016 à 07:24
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
16 juin 2016 à 12:22
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 jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2
16 juin 2016 à 15:26
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 vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
16 juin 2016 à 15:30
Oui, il manque une petite accolade ouvrante ligne 13, à la fin du for ;)
0
bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2 > paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018
16 juin 2016 à 15:32
Merci beaucoup!
0
bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017 2 > bayefalle Messages postés 122 Date d'inscription jeudi 7 novembre 2013 Statut Membre Dernière intervention 12 mai 2017
16 juin 2016 à 15:50
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 vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 16/06/2016 à 16:13
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