2013-02-26 28 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