0

かなり簡単な質問があります。マップとマルチマップを学習しているだけで、それらを関数に渡す方法を知りたいです。マルチマップに頭を悩ませていますが、それらを void 関数に渡す方法の簡単な例が欲しいです。

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


};
4

4 に答える 4

3

なぜポインターで渡すのですか?参照 (関数内でマップを変更する場合) または 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"));
};
于 2011-03-15T15:54:38.393 に答える
1

movies.begin()イテレータと関数movies.end()に渡すのは、「STLの精神で」私には思えます。calculateAverage例えば:

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

以下が定義されています。

typedef multimap<string,int>::const_iterator MapIt;
void calculateAverage(const MapIt &begin, const MapIt &end)
{
...
}
于 2012-02-09T18:58:01.237 に答える
1

参照渡し:

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

しかし、ポインタを渡すことはそれほど悪くありません。構文がよく見えないだけです。

ポインターを渡すことを選択した場合は、呼び出し元のサイトで次の構文を使用する必要があります。

calculateAverage(&movies);
于 2011-03-15T15:54:03.340 に答える
0

multimap<string,int>タイプの値をそのタイプへのポインタとして渡そうとしていますmultimap<string,int>*。関数のシグネチャをに変更し、それに応じてvoid calculateAverage(const multimap<string,int>& q)コードを変更する ( に置き換える) か、次のように呼び出します。->.calculateAverage(&movies)

于 2011-03-15T15:55:54.430 に答える