修改映射对的值
Modifying value of map pair
有人可以解释为什么每当我尝试增加该对时什么都没有发生吗?我试着调试它,虽然它进入了递增的行,但没有任何反应。
编辑:这是整个函数
void VoteCollector::resultsBasedOnAge(std::vector<Voter>& voters)
{
std::map<int,std::pair<int,int>> ageVoters;
std::map<int,std::pair<int,int>>::iterator hasAge = ageVoters.begin();
for(unsigned i = 0; i < voters.size(); i++)
{
if(ageVoters.find( voters.at(i).getAge() ) != ageVoters.end() )
{
if(voters.at(i).getVote() == "leave")
{
hasAge->second.first++;
}
else if(voters.at(i).getVote() == "stay")
{
hasAge->second.second++;
}
hasAge++;
}
else
{
if(voters.at(i).getVote() == "leave")
{
ageVoters.insert(std::make_pair(voters.at(i).getAge(),std::make_pair(1,0)));
}
else if(voters.at(i).getVote() == "stay")
{
ageVoters.insert(std::make_pair(voters.at(i).getAge(),std::make_pair(0,1)));
}
hasAge++;
}
}
for(std::map<int,std::pair<int,int>>::iterator it = ageVoters.begin(); it != ageVoters.end(); it++)
{
std::cout << it->first << " years -- " << it->second.first << " leave.\t" << it->second.second << " stay\n";
}
}
据我所知,您的代码不起作用,因为您的 hasAge
指向,我不知道,您可能不是故意的。您要将 std::map::find
.
的结果分配给它
假设你使用的是C++11,代码也可以简化为:
void VoteCollector::resultsBasedOnAge(const std::vector<Voter>& voters)
{
std::map<int, std::pair<int, int>> ageVoters;
for (const auto& v: voters)
{
int age = v.getAge();
const auto& vote = v.getVote();
auto it = ageVoters.find(age);
if (it != ageVoters.cend())
{
if (vote == "leave")
{
++it->second.first;
}
else if (vote == "stay")
{
++it->second.second;
}
}
else
{
if (vote == "leave")
{
ageVoters.insert(std::make_pair(age, std::make_pair(1, 0)));
}
else if (vote == "stay")
{
ageVoters.insert(std::make_pair(age, std::make_pair(0, 1)));
}
}
}
for (const auto& v: voters)
{
std::cout << v.first << " years -- "
<< v.second.first << " leave.\t"
<< v.second.second << " stay\n";
}
}
有人可以解释为什么每当我尝试增加该对时什么都没有发生吗?我试着调试它,虽然它进入了递增的行,但没有任何反应。
编辑:这是整个函数
void VoteCollector::resultsBasedOnAge(std::vector<Voter>& voters)
{
std::map<int,std::pair<int,int>> ageVoters;
std::map<int,std::pair<int,int>>::iterator hasAge = ageVoters.begin();
for(unsigned i = 0; i < voters.size(); i++)
{
if(ageVoters.find( voters.at(i).getAge() ) != ageVoters.end() )
{
if(voters.at(i).getVote() == "leave")
{
hasAge->second.first++;
}
else if(voters.at(i).getVote() == "stay")
{
hasAge->second.second++;
}
hasAge++;
}
else
{
if(voters.at(i).getVote() == "leave")
{
ageVoters.insert(std::make_pair(voters.at(i).getAge(),std::make_pair(1,0)));
}
else if(voters.at(i).getVote() == "stay")
{
ageVoters.insert(std::make_pair(voters.at(i).getAge(),std::make_pair(0,1)));
}
hasAge++;
}
}
for(std::map<int,std::pair<int,int>>::iterator it = ageVoters.begin(); it != ageVoters.end(); it++)
{
std::cout << it->first << " years -- " << it->second.first << " leave.\t" << it->second.second << " stay\n";
}
}
据我所知,您的代码不起作用,因为您的 hasAge
指向,我不知道,您可能不是故意的。您要将 std::map::find
.
假设你使用的是C++11,代码也可以简化为:
void VoteCollector::resultsBasedOnAge(const std::vector<Voter>& voters)
{
std::map<int, std::pair<int, int>> ageVoters;
for (const auto& v: voters)
{
int age = v.getAge();
const auto& vote = v.getVote();
auto it = ageVoters.find(age);
if (it != ageVoters.cend())
{
if (vote == "leave")
{
++it->second.first;
}
else if (vote == "stay")
{
++it->second.second;
}
}
else
{
if (vote == "leave")
{
ageVoters.insert(std::make_pair(age, std::make_pair(1, 0)));
}
else if (vote == "stay")
{
ageVoters.insert(std::make_pair(age, std::make_pair(0, 1)));
}
}
}
for (const auto& v: voters)
{
std::cout << v.first << " years -- "
<< v.second.first << " leave.\t"
<< v.second.second << " stay\n";
}
}