C++ “类构造函数”;“吃”;提高价值

C++ “类构造函数”;“吃”;提高价值,c++,class,random,simulation,C++,Class,Random,Simulation,所以我试着为一个类运行这个sim程序,这个类让我们使用set构建一个Bet类 下面是类定义: class Bet2{ private: set<int> mainNumbers; set<int> luckyNumbers; public: Bet2(); void show() const; set<int> getMainNumbers(); set<int> getLuckyNumbers();

所以我试着为一个类运行这个sim程序,这个类让我们使用set构建一个Bet类

下面是类定义:

class Bet2{
private:
    set<int> mainNumbers;
    set<int> luckyNumbers;
public:
    Bet2();
    void show() const;
    set<int> getMainNumbers();
    set<int> getLuckyNumbers();
};
Bet2类{
私人:
设置主要号码;
设置幸运数字;
公众:
Bet2();
void show()常量;
设置getMainNumber();
设置getLuckyNumbers();
};
所以我决定使用随机库,因为他们在类中为我们提供的rand()函数在为sim同时创建一组Bet2对象时会输出相同的值

然而,出于某种原因,它并没有给出它应该给出的值的数量。有时它会吐出4个主数字(而不是5个),或者只吐出1个幸运数字(而不是2个)

以下是构造函数的代码:

Bet2::Bet2() {
    random_device rd;
    uniform_int_distribution<int> main(1, 50);
    for (int i = 0; i < 5; i++)
        mainNumbers.insert(main(rd));
    uniform_int_distribution<int> star(1, 12);
    for (int i = 0; i < 2; i++)
        luckyNumbers.insert(star(rd));
}
Bet2::Bet2(){
随机器件rd;
统一配水干管(1,50);
对于(int i=0;i<5;i++)
主要编号。插入(主要(rd));
均匀分布星(1,12);
对于(int i=0;i<2;i++)
幸运数字。插入(星号(rd));
}
在主要功能中,我使用统一分布和随机设备运行了一些测试,它运行起来没有任何问题。出于某种原因,当我为我的sim初始化Bet2向量时,它会吞噬值:

Main Numbers: 11 23 27 32 36
Star Numbers: 3 11
Main Numbers: 4 18 22 27 28
Star Numbers: 9 11
Main Numbers: 3 5 25 43      <-
Star Numbers: 1              <-
Main Numbers: 40 42 43 46 50
Star Numbers: 2 7
Main Numbers: 7 10 14 27 45
Star Numbers: 9 10
Main Numbers: 11 15 21 24 35
Star Numbers: 1 11
Main Numbers: 3 25 29 45 50
Star Numbers: 3 7
Main Numbers: 11 15 23 25 37
Star Numbers: 1 6
Main Numbers: 7 8 26 31 43
Star Numbers: 6 9
Main Numbers: 15 27 36 38 39
Star Numbers: 2 8
主要号码:11 23 27 32 36
星号:311
主要号码:41822728
星号:9-11
主要数字:352543最多只能存储给定值的一个副本

缺少数字应该是因为随机数恰好与之前看到的数字相同

如果要存储相同值的倍数,则应使用

如果要生成一组唯一的定义数量的值,最好先生成一组候选值,然后使用。

最多只能存储一个给定值的副本

缺少数字应该是因为随机数恰好与之前看到的数字相同

如果要存储相同值的倍数,则应使用


如果要生成一组唯一的已定义数量的值,最好先生成一组候选值,然后使用。

好的,您使用了集合。你知道电视机是怎么工作的吗?特别是,您知道当您插入相同的值两次时会发生什么吗?你得到了你想要的东西,一组独特的值;)您是否知道
std::set
会过滤掉重复项?(这是制作
std::set
的用例)如果您不喜欢这样,请使用
std::vector
。好的,您使用了set。你知道电视机是怎么工作的吗?特别是,您知道当您插入相同的值两次时会发生什么吗?你得到了你想要的东西,一组独特的值;)您是否知道
std::set
会过滤掉重复项?(这是关于
std::set
的用例)如果你不喜欢这个,就用
std::vector
来代替。嘿!谢谢你的快速回复!在这种情况下,这是一种彩票类型的赌注,所以multiset不适用。使用while(set1.size()