【问题标题】:Grouping some pairs after using make_pair使用 make_pair 后对一些对进行分组
【发布时间】:2014-01-19 07:52:00
【问题描述】:

使用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个小时阅读它,看看是否有任何示例或类似问题可以指导我,但没有运气!

【问题讨论】:

    标签: c++ database


    【解决方案1】:

    您可以通过使用map(或unordered_map,如果您有 C++11 或来自 boost)大大简化您的问题。

    我们的想法是对您的配对/频率列表进行一次迭代,并将每个键的部分总和存储在映射中。然后,您可以在第二个循环中打印出总和。

    #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
    }
    

    【讨论】:

    • 谢谢,这段代码看起来很聪明,但我没有,我使用的是visual stdio 2013/vc++。因为这是我第一次听说 boost 和 c++11,所以我阅读了一些相关主题(例如stackoverflow.com/questions/17440810/…),这对我来说听起来很复杂。
    • 其实,我只是改变 map[p1.first.first] += p1.second;地图[p1.first.second] += p1.second; sums[p1.first.first] += p1.second;总和[p1.first.second] += p1.second;它有效。谢谢你
    • 啊,是的,错字。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 2022-07-22
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 2021-07-13
    相关资源
    最近更新 更多