如何使用vector <pair <double,uint =“”>&gt;?</pair <double,>实现STL partial_sum的binOp仿函数

时间:2010-11-06 15:46:36

标签: c++ stl

我想在向量中使用我的元素的partial_sum,其中每个元素都是pair<double, unsinged int>partial_sum应逐步添加双值(每对中的第一个)。

示例:

vector<pair<double, unsigned int> > temp_vec;
temp_vec.push_back(make_pair(0.5, 0));
temp_vec.push_back(make_pair(0.2, 1));
temp_vec.push_back(make_pair(0.3, 2));
partial_sum(temp_vec.begin(), temp_vec.end(), temp_vec.begin(), ???);   // in place

应该给我一个载体:[(0.5,0),(0.7,1),(1.0,2)]

如何实现必要的仿函数来使用partial_sum函数?

我能够使用自定义函数在stl lower_bound搜索中使用我的对,但在上面的例子中,我不知道如何声明二进制操作。

2 个答案:

答案 0 :(得分:5)

struct pair_sum {
    pair<double, unsigned int> operator()(const pair<double, unsigned int> & sum, const pair<double, unsigned int> & i) {
        return pair<double, unsigned int>(sum.first + i.first, i.second);
    }
};

这会将first加起来并保持second不变。

答案 1 :(得分:2)

使用C ++ lambdas,typedef和可运行的测试对https://stackoverflow.com/a/4113820/895245进行了轻微的清理:

#include <functional>
#include <iostream>
#include <numeric>
#include <vector>

int main() {
    typedef std::pair<double, int> P;
    auto v = std::vector<P> {
        {0.5, 0},
        {0.2, 1},
        {0.3, 2}
    };
    std::partial_sum(v.begin(), v.end(), v.begin(),
        [](const P& x, const P& y){return P(x.first + y.first, y.second);}
    );
    for (auto &x : v) {
        std::cout << x.first << " " << x.second << std::endl;
    }
}

输出:

0.5 0
0.7 1
1 2

如果您还想轻松计算每个概率的累积概率值,请查看:Running Part of Code with a Specified Probability