给定一堆字符串,我正在尝试创建一个程序,该程序可以根据我的输入模拟具有加权分布的伪随机行为。
到目前为止,我想出了这个
#include <iostream>
#include <random>
#include <type_traits>
#include <map>
#include <vector>
#include <string>
#include <initializer_list>
#define N 100
int main()
{
std::vector<std::string> interval{"Bread", "Castle", "Sun"};
std::vector<float> weights { 0.40f, 0.50f, 0.10f };
std::piecewise_constant_distribution<> dist(interval.begin(),
interval.end(),
weights.begin());
std::random_device rd;
std::mt19937 gen(rd()) ;
for(int i = 0; i<N;i++)
{
std::cout << dist(gen) << "\n";
}
return(0);
}
但是这个东西不起作用,我不知道为什么,std::piecewise_constant_distribution
根据在线示例,它的通常用法是 with std::arrays
,但我正在尝试使用它来实现它std::vector
,这是我发现的主要区别。
使用 Clang++ 的错误输出是
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/random.tcc:2409:10: error: no matching member function for
call to 'push_back'
_M_int.push_back(*__bbegin);
~~~~~~~^~~~~~~~~
但我无法理解它,因为.push_back
我的代码中没有明确的内容,我也没有从其中得到什么,因为调试模板类是一场噩梦,我只是从这个开始。
任何人都知道为什么代码不起作用?