2013-02-26 25 views
0

我想要生成int或double類型的隨機數字,然後將它們插入一個類型的容器向量,列表爲排序順序 但問題是插入是不工作,我不知道爲什麼,所以你能幫助我嗎?插入到一個通用的容器不起作用

#include <iostream> 
#include <iterator> 
#include <random> 
#include <vector> 
#include<list> 
#include<deque> 
#include <algorithm> 
#include <chrono> 

using namespace std; 

int random_gen(){ 
    default_random_engine re { std::random_device()() }; 
    uniform_int_distribution<int> dist; 
    auto r= bind(dist,re); 
    int x =r(); 
    return x; 
} 



template<typename SequenceContainer> 
void build_cont(const SequenceContainer& seq, int n) 
{ 
    for(int i=0; i!=n; ++i) { 
     int gen = random_gen(); 
     //std::iterator<T> it=lower_bound(begin(seq), end(seq), gen); 
     typename SequenceContainer::iterator it; 
     it=find_if(seq.begin(), seq.end(), [it](){ return *it<gen;}); 
     seq.insert(it, gen); 
    } 
    for(auto i:seq) 
     cout<<i<<endl; 
} 
int main() { 
    int n=10; 
    vector<int> v; 
    list<int>ls; 
    deque<int> deq; 
    build_cont(v, n); 
    build_cont(ls, n); 
    build_cont(deq, n); 

    return 0; 
} 

我得到現在是一個鏈接錯誤,所以我不知道什麼是錯的錯誤?

+1

如果你想將其插入順序(即維持秩序當你插入)爲什麼不使用'std :: set'或'std :: multiset'? – 2013-02-26 04:29:48

+0

我需要的代碼與矢量,列表和德克工作 – user1653150 2013-02-26 04:31:02

+0

我遇到的問題是與find_if和插入 – user1653150 2013-02-26 04:31:37

回答

4

這裏有兩個問題:

  1. 你不能把一個常量引用SequenceContainer然後試圖獲得一個非const迭代器或插入項目成const引用。刪除常量。

  2. 您需要的拉姆達捕獲子句中包括「根」,它必須採取的值作爲參數:

    typename SequenceContainer::iterator it = find_if(
        seq.begin(), 
        seq.end(), 
        [gen](const int& val) { return gen < val; } 
    ); 
    
+0

謝謝,這似乎工作,但請其他一些問題,如果我想插入字符串而不是int,但使用相同的功能,我如何檢索類型? – user1653150 2013-02-26 05:15:15

+0

您可以使用「typename SequenceContainer :: reference」檢索類型: 'typename SequenceContainer :: iterator it = find_if(seq.begin(),seq.end(),[gen](const typename SequenceContainer :: reference& val){return gen {val;});' – LeftoverPi 2013-02-26 05:36:21

+0

@LeftoverPi:'SequenceContainer :: reference'已經是一個引用,'&'只是噪聲(我假設你真的想在這裏使用'SequenceContainer :: const_reference') ''SequenceContainer :: value_type'在你的評論中是正確的。 – ildjarn 2013-02-26 21:47:29