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