2010-11-06 48 views
5

我想要一個矢量中的元素partial_sum,其中每個元素是一對。 partial_sum應該遞增地添加double值(每對中的第一個)。帶矢量<pair <double,uint>>的STL partial_sum?如何實現binOp函子?

實施例:

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搜索中使用我的對,但在上面的情況下,我不知道如何聲明二進制操作。

我不知道它是否有幫助,但使用boost庫是可能的。

回答

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 S和返回second小號不變。

+0

優秀。使用operator()將代碼轉換爲函子後,它完美地工作。正是我想要達到的。只有一句話:你的代碼是一個「正常」功能。你爲什麼不發佈函子?有什麼理由嗎? (我是一種C++ noob,與周圍的人相比,也許我在混淆這些詞) – sascha 2010-11-06 16:02:55

+0

@sascha:你說得對,這不是一個函數,我只是懶得打出來。將解決。 – 2010-11-06 16:03:56

+0

非常感謝。 – sascha 2010-11-06 16:07:53

1

以下是使用C++ lambda表達式,typedefs和可運行測試的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

相關問題