1

マップのキーとして文字列のペアを使用し、値として int を使用しています。マップを検索したいのですが、正確なペアが既に存在する場合は値を増やし、そうでない場合はペアをマップに挿入します (値は 1)。コンパイルしますが、実際には既に存在するペアを見つけるのではなく、挿入するだけです。(出力はテストのみを目的としています)。問題はペアでの使用にあると思いますが、.find()これを修正する方法がわかりません...

4

2 に答える 2

2

あなたが示したコードは正しいようです。を含む完全な例で実証できますmainか?

さらに、次のことで逃げることができると思いますoperator[]

++pairs[std::make_pair(*slow, *fast)];

ただし、実際の問題は、おそらくpairs「出力」パラメーターであると想定しているのに、値で渡していることです。あなたの関数は、事実上、コンテナのコピーのみを変更しています。代わりに参照によって取得したい。(パラメータの前にmap<pair<string, string>, int> findPairs(map<pair<std::string,std::string>, int>& pairs, multiset<string> artists){注意してください)。&pairs

于 2013-01-10T18:15:08.277 に答える
0

郵便番号に間違いはありません

しかし、あなたは必要以上にやりすぎています。たとえば、このコードは、

yo=pairs.find(p);
if (yo==pairs.end()) 
{
  pairs.insert(make_pair(p,1));
  cout<<"inserted"<<endl;
}
else 
{
   yo->second+=1;
   cout<<"entered"<<endl;
}

はこれとまったく同じです:

pairs.insert(make_pair(p,1)).first->second += 1;

これはこれとまったく同じです:

++pairs[p];

++pairs[p]これは、コード全体を、またはこれだけで置き換えることができることを意味します。

++pairs[make_pair(*slow, *fast)];

pですのでmake_pair(*slow, *fast)、やっぱり。

于 2013-01-10T18:16:03.147 に答える