Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用向量将每床一名患者随机分组_C++_Vector - Fatal编程技术网

C++ 使用向量将每床一名患者随机分组

C++ 使用向量将每床一名患者随机分组,c++,vector,C++,Vector,我对向量很陌生。我有一个随机分配病人到床上的项目分配。我需要这样做,这样每张床上只能有一个病人。我的问题是如何让一名患者被随机分类并分配到一张床上 这是一个相当大的程序,代码在多个文件中,所以请容忍我。如果你不明白什么,请告诉我,我会尽力把它弄清楚 这是我给每个床位只分配一名患者的任务。这个函数很可能是我的问题 string Hospital::assignRandPatientToBed() { for(int i=0;i<2;i++) { for(uns

我对向量很陌生。我有一个随机分配病人到床上的项目分配。我需要这样做,这样每张床上只能有一个病人。我的问题是如何让一名患者被随机分类并分配到一张床上

这是一个相当大的程序,代码在多个文件中,所以请容忍我。如果你不明白什么,请告诉我,我会尽力把它弄清楚

这是我给每个床位只分配一名患者的任务。这个函数很可能是我的问题

string Hospital::assignRandPatientToBed()
{
    for(int i=0;i<2;i++)
    {
        for(unsigned int pi=0;pi<vBeds.size();pi++)
        {
            if(rand()%2)
            {
                 //bigRand is a function: numberToString=9      
                 vPatients[bigRand()%vPatients.size()].bedId;   ///MORE THAN  LIKELY WRONG
            }
        }
    }
    return "Random Beds assigned to Patients.\n";
}
patient.h的头文件部分(我只使用私有部分,因为它是一个大的头文件)


它采用随机创建的名字,并将其分配给床。对于输出,我选择在5张病床上增加5名患者,但在2张病床后我将其切断,因为它只会重复5次

执行“将向量V的项随机分配到容器C中的插槽”时的一般原则如下:

  • 在R中选择一个范围为0..C.size()-1的随机数
  • 检查插槽C[R]是否可用。如果没有,请重复步骤1
  • 选择V中的下一个可用项,并插入C[R]
  • 如果不是所有的V都完成了,返回到1 想法:

    VBase向量开始,并使用C++中的STL以随机顺序通过床进行迭代。一旦你有一个新的病人要分配,你就要进行下一次迭代并使用这张床。您需要通过维护明确的免费床位列表

    fbl
    ,将床位列表返回到可用床位池


    断言是迭代器中与
    fbl
    连接的其余元素相当于所有可用的床池。如果到达迭代器的末尾,您可以通过
    fbl
    重新创建它,然后将
    fbl
    设置为一个新的空列表。

    您还可以对床而不是患者应用随机排列。然后,您可以按照患者到达的顺序分配患者,并将他们映射到随机床位。由于您的
    bed
    类包含一个
    id
    属性,因此这种方法不会丢失任何信息


    有关如何执行此操作的示例,请参见。

    Ok,因此我缺少一个用于检查插槽是否可用的函数?或者“未使用”之类的函数,是的。当然,collapser提出的随机洗牌是解决同样问题的另一种方法。虽然这假设你不需要在向量中按特定顺序排列床位。哦,好的,是的,我想按数字顺序排列床位,但随机添加患者。为什么。推回()不适用于床??我们将其用于分配给患者的医生,但它不适用于病床;不,它只是一个
    int
    ,因此当床是空的时,它有一些“未使用”值,当它被使用时,它作为患者的id-因为你不希望每张床上有多个患者,你不需要向量,因此不需要使用push\u back,只需将患者的id分配给床上的patientID即可。谢谢。我会读它,试着把它联系起来。
    private:
        int nextPatientIDtoBeUsed;
        vector<Patient> vPatients;
        map<int,int> PatientIDIndex;
        map<string,int>PatientNameIndex;
        map<string,int>PatientCategoryIndex;
    
        int nextDoctorIDtoBeUsed;
        vector<Doctor> vDoctors;
        map<int,int> DoctorIDIndex;
    
        int nextBedIDtoBeUsed;
        vector<Bed> vBeds;
        map<int, int> BedIDIndex;
    };
    
    class Bed 
    {
       friend class Hospital;
    
       public:
    
       private:
       int id;
       string location;
       string bedType;
       int patientID;
    };
    
    private:
        int id;
        vector<int> doctorIDs;
        int bedId;
    };
    
         500 CDDIUTEIOJ
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
         501 CMPSAJLFVG
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824
                892795431 Muw, Eziel (174) 094-8824