Question

J'ai une question assez simple. Im juste apprendre Cartes et multimaps et veulent savoir comment les passer dans une fonction. Ive a obtenu la plupart de mon esprit enroulé autour multimaps mais voudrait un exemple rapide sur la façon de les passer dans une fonction vide.

int main()
{
multimap<string,int> movies;


movies.insert(pair<string,int>("Happy Feet",6));
movies.insert(pair<string,int>("Happy Feet",4));
movies.insert(pair<string,int>("Pirates of the Caribbean",5));
movies.insert(pair<string,int>("Happy Feet",3));
movies.insert(pair<string,int>("Pirates of the Caribbean",4));
movies.insert(pair<string,int>("Happy Feet",4));
movies.insert(pair<string,int>("Flags of out Fathers",4));
movies.insert(pair<string,int>("Gigli",4));

cout<<"There are "<<movies.count("Happy Feet")<<" instances of "<<"Happy Feet"<<endl;
cout<<"There are "<<movies.count("Pirates of the Caribbean")<<" instances of "<<"Pirates of the Caribbean"<<endl;
cout<<"There are "<<movies.count("Flags of out Fathers")<<" instances of "<<"Flags of out Fathers"<<endl;
cout<<"There are "<<movies.count("Gigli")<<" instances of "<<"Gigli"<<endl;



system("PAUSE");
calculateAverage(movies);  // this is where im getting errors such as no conversions
return 1;
}
void calculateAverage(multimap<string,int> *q)
{
// this function wont calculate the average obviously. I just wanted to test it
int averageH;
int averageP;
int averageF;
int averageG;

averageH = (q->count("Happy Feet"));
averageP = (q->count("Happy Feet"));
averageF = (q->count("Happy Feet"));
averageG = (q->count("Happy Feet"));


};
Était-ce utile?

La solution

Pourquoi passer par pointeur? Je pense qu'il est préférable de passer une référence (si la carte doit être modifiée dans la fonction) ou une référence à Const autrement

void calculateAverage(const multimap<string,int> & q)
{
// this function wont calculate the average obviously. I just wanted to test it
int averageH;
int averageP;
int averageF;
int averageG;

averageH = (q.count("Happy Feet"));
averageP = (q.count("Happy Feet"));
averageF = (q.count("Happy Feet"));
averageG = (q.count("Happy Feet"));
};

Autres conseils

Passe par référence:

void calculateAverage(const multimap<string,int> & q)

Mais le pointeur passe est pas si mal. Il est juste que la syntaxe ne semble pas bon.

Si vous choisissez de passer le pointeur, puis sur le site appelant, vous avez à utiliser cette syntaxe:

calculateAverage(&movies);

Il me semble plus « dans l'esprit du TSL » pour passer à itérateurs, movies.begin() et movies.end() à la fonction calculateAverage. Par exemple:

calculateAverage(movies.begin(),movies.end());

défini par ce qui suit:

typedef multimap<string,int>::const_iterator MapIt;
void calculateAverage(const MapIt &begin, const MapIt &end)
{
...
}

Vous essayez de passer une valeur de type multimap<string,int> comme un pointeur vers ce type, à savoir multimap<string,int>*. Soit changer la signature de la fonction de void calculateAverage(const multimap<string,int>& q) et modifier en conséquence son code (remplacer -> avec .) ou appeler comme ceci:. calculateAverage(&movies)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top