Howto Créer une Carte de Vecteur à Partir des Données Triées
J'ai les données suivantes comme entrée (triés par première colonne):
foo 1 2
foo 3 3
bar 10 11
Je veux créer une Carte de Vecteur avec la première colonne comme clé de la carte
tel que nous avons:
foo = {1,2,3,3}
bar = {10,11}
Mais pourquoi mon code ci-dessous ne fonctionne pas comme prévu?
#include <vector>
#include <map>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main ( int arg_count, char *arg_vec[] ) {
if (arg_count !=2 ) {
cerr << "expected one argument" << endl;
return EXIT_FAILURE;
}
string line;
ifstream acemblyfile (arg_vec[1]);
map <string, vector<int> > myMapOfVec;
vector <string> myVec;
string KEY = "" ;
if (acemblyfile.is_open())
{
while (getline(acemblyfile,line) )
{
stringstream ss(line);
string KEY_TEMP;
int VAL1;
int VAL2;
ss >> KEY_TEMP >> VAL1 >> VAL2;
MyVec.push_back(VAL1);
MyVec.push_back(VAL2);
if (KEY_TEMP != KEY) {
myMapOfVec[KEY] = MyVec;
KEY = KEY_TEMP;
MyVec.clear();
}
}
acemblyfile.close();
}
else {
cout << "Unable to open file";
}
for( map<string, vector<int> >::iterator iter = myMapOfVec.begin(); iter != myMapOfVec.end(); ++iter ) {
vector <int> tempVec = (*iter).second;
string Key = (*iter).first;
for (unsigned i =0; i<tempVec.size(); i++) {
cout << Key << " " << tempVec[i] << endl;
}
}
return 0;
}
OriginalL'auteur neversaint | 2009-03-16
Vous devez vous connecter pour publier un commentaire.
Que Mykola dit, vous devez utiliser le vecteur de la carte au lieu d'en créer un vous-même. J'ai changé l'ensemble de votre code de sorte qu'il fonctionne pour moi. Notez que vous a écrit quelques-uns des noms de variables avec un mauvais cas (MyMapOfVec au lieu de myMapOfVec) et cela a conduit à des erreurs de compilation.
Assurez-vous également que vous n'avez pas de saut de ligne à la fin de votre fichier d'entrée parce que cela va entraîner la répétition de la dernière ligne.
Pour ton exemple, cela donne à la sortie
OriginalL'auteur schnaader
N'ajoutez pas de vérifier KEY_TEMP != CLÉ. Parce que, dans votre cas, ils sont égaux en tant que toto va deux fois, un par un. Juste
OriginalL'auteur Mykola Golubyev
Quelques notions de base sur les cartes et les vecteurs -
http://rowsandcolumns.blogspot.com/2010/10/c-maps-and-vectors.html
OriginalL'auteur Harpreet