2

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

这是一个体面的程序,代码在多个文件中,所以请耐心等待。如果您不明白某些事情,请告诉我,我会尽我所能尝试并清除它。

这是我每张床只分配一名患者。这个功能很可能是我的问题。

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";
}

我的主要课程的私人部分,hospital.h

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;
};

Bed.h 的头文件

class Bed 
{
   friend class Hospital;

   public:

   private:
   int id;
   string location;
   string bedType;
   int patientID;
};

patient.h 的头文件部分(我只为此目的使用私有部分,它是一个大头文件)。

private:
    int id;
    vector<int> doctorIDs;
    int bedId;
};

我必须修复的输出。床位由500分配,病人是8927号码。

     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

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

4

3 回答 3

2

主意:

vBeds向量开始,使用 c++ stl 中的random_shuffle函数模板以随机顺序遍历床。一旦你有一个新的病人要分配,你就可以进行下一次迭代并使用这张床。您将希望通过维护一个明确的空闲床位列表将床位列表返回到可用床位池中fbl

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

于 2013-08-01T16:31:52.513 回答
2

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

有关如何执行此操作的示例,请参阅随机洗牌算法。

于 2013-08-01T16:32:22.830 回答
1

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

  1. 在 0..C.size()-1 范围内选择一个随机数到 R
  2. 检查插槽 C[R] 是否可用。如果没有重复步骤 1。
  3. 选择 V 中的下一个可用项目,然后插入 C[R]。
  4. 如果没有完成所有 V,请返回 1。
于 2013-08-01T16:30:00.530 回答