当键是一对时,在映射中使用.find()函数

问题描述 投票:1回答:2

我在地图中使用一对字符串作为键,并使用int作为值。我想在地图中搜索,如果确切的对已经存在,则递增该值,否则将该对插入到地图中(值为1)。然而,它编译它实际上并没有找到已经存在的对,它只是插入。 (输出仅用于测试目的)。我认为问题是使用.find()配对,但不知道如何解决这个问题...

c++ dictionary std-pair
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)。


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)

© www.soinside.com 2019 - 2024. All rights reserved.