我使用一对字符串作为映射中的键,使用一个 int 作为值。我想在地图中搜索,如果确切的对已经存在,则增加该值,否则将该对插入地图(值为 1)。它编译,但是,它实际上并没有找到已经存在的对,它只是插入。(输出仅用于测试目的)。我认为问题在于使用.find()
配对,但不知道如何解决这个问题......
问问题
1843 次
2 回答
2
您显示的代码似乎是正确的。你能用一个完整的例子来演示main
吗?
此外,我认为您可以摆脱operator[]
:
++pairs[std::make_pair(*slow, *fast)];
然而,真正的问题可能是您希望pairs
成为一个“out”参数,而您通过值传递它。您的功能实际上只是修改容器的副本。你想通过参考来代替它。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];
这意味着整个代码可以用 just 替换++pairs[p]
,或者只是这个:
++pairs[make_pair(*slow, *fast)];
因为毕竟p
是。make_pair(*slow, *fast)
于 2013-01-10T18:16:03.147 回答