Вопрос

У меня довольно простой вопрос. Я просто изучаю карты и мультимапы и хочу знать, как передать их в функцию. У меня большая часть моего разума обернула вокруг мультимапа, но хотел бы быстрый пример того, как передать их в пустой функции.

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"));


};
Это было полезно?

Решение

Зачем проходить по указателю? Я думаю, что лучше передать ссылку (если карта должна быть изменена в рамках функции) или ссылка на const в противном случае

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"));
};

Другие советы

Пройти ссылку:

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

Но затем проходной указатель не так уж и плох. Просто этот синтаксис не выглядит хорошо.

Если вы решите передать указатель, то на сайте вызова вы используете этот синтаксис:

calculateAverage(&movies);

Мне кажется больше «в духе STL» передать итераторам, movies.begin() а также movies.end() в calculateAverage функция Например:

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

со следующим определением:

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

Вы пытаетесь передать значение типа multimap<string,int> Как указатель на этот тип, т.е. multimap<string,int>*. Анкет Либо измените подпись функции на void calculateAverage(const multimap<string,int>& q) и соответственно изменить свой код (замените -> с .), или назовите это так: calculateAverage(&movies).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top