下面是我的代碼,用於根據用戶定義的權重值生成隨機數。這一切都有效,直到我試圖讓數據類型成爲任何類型,例如雙,浮動。我沒有什麼經驗在實踐中實施,只能在教科書上閱讀。任何人都可以幫助我解決它嗎?模板類執行錯誤
感謝,
class WeightedRandom
{
public:
template <class T1,class T2>
void setWeight(T1 i,T2 val)
{
m[i]=val;
total+=val;
}
void generator()
{
int val=rand()%total;
for (auto a:m)
{
if (val<a.second)
{
res[a.first]++;
break;
}
val-=a.second;
}
}
void print()
{
for (auto a:res)
{
cout<<a.first<<" "<<a.second<<endl;
}
}
private:
template <class T1,class T2>
unordered_map<T1,T2> m;
template <class T3,class T4>
unordered_map<T3,T4> res; // object-count
int total=0;
};
int main(int argc, const char * argv[])
{
WeightedRandom WR;
WR.setWeight(1, 5);
WR.setWeight(2, 20);
WR.setWeight(3, 50);
WR.setWeight(4, 20);
WR.setWeight(5, 10);
int n=10000;
for (int i=0;i<n;++i)
{
WR.generator();
}
WR.print();
}
什麼是錯誤?順便說一句,在'total + = val;''val'是T2的時候,你有'int total'。 – Serge
是原來的地方,現在所有的模板都是int嗎? –