使用make_pair之后,我得到了一些对,即pairToCount
采用这种格式(元素1元素2)= Db中频繁的#:
(1 2) = 1
(1 3) = 1
(1 4) = 1
(2 3) = 2
(2 4) = 3
(2 5) = 1
(3 4) = 2
(5 4) = 1
我想为每个数字(1,2,3,4,5)执行以下操作:
首先,检查每对是否有数字1 ==>然后总结其频繁例如: 1以下列对存在:(1 2),(1 3),(1 4)==>频繁的总和是= 1 + 1 + 1 = 3
对2,3,4,5执行相同操作
2在(1 2),(2 3),(2 4),(2 5)==>频繁的总和是= 1 + 2 + 3 + 1 = 7
3在(1 3),(2 3),(3 4)==>频繁的总和是= 1 + 2 + 2 = 5
等等。这是我写的代码。
int sum = 0;
int found;
for (const auto& p1 : pairToCount)
{
int r = p1.first.first;
std::cout << " (" << r;
for (const auto& p2 : pairToCount)
{
if (r == p2.first.first)
{
sum += p2.second;
found = p2.first.second;
}
else if (r == p2.first.second)
{
sum += p2.second;
found = p2.first.first;
}
else
exit;
std::cout << "," << found ;
}
std::cout << ") = "<< sum << "\n ";
sum = 0;
}
我得到了复制打印最后一个元素和相同的测试 + 由于没有以4开头的对,因此在这种情况下代码不起作用。
结果如下:
(1,2,3,4,4,4,4,4,4) = 3
(1,2,3,4,4,4,4,4,4) = 3
(1,2,3,4,4,4,4,4,4) = 3
(2,1,1,1,3,4,5,5,5) = 7
(2,1,1,1,3,4,5,5,5) = 7
(2,1,1,1,3,4,5,5,5) = 7
(3,5,1,1,2,2,2,4,4) = 5
(5,4,4,4,4,4,2,2,4) = 2
我只是学习make_pair,花了4个小时阅读它,看看是否有任何例子或类似的问题可以指导我但没有运气!
答案 0 :(得分:2)
您可以使用map
(或unordered_map
,如果您有C ++ 11或来自提升)来大大简化您的问题。
这个想法是在你的对/频率列表上迭代一次,并将每个键的部分和存储在地图中。然后,您可以在第二个循环中打印出总和。
#include <map>
// ...
std::map<int,int> sums;
for (const auto& p1 : pairToCount)
sums[p1.first.first] += p1.second;
sums[p1.first.second] += p1.second;
}
for (const auto& k : sums) {
// print what you want
}