所以我只是想学习一些C ++并且正在创建一个模型应用程序来预订公司的采访。
我需要一种方法来处理更干净的东西然后只使用5个数组。
我拥有的数据是:
(int) Name of company member (e.g 1 John, 2 Jessica)
(int) Day of the week (e.g 1 Monday, 2 Tuesday)
(int) Timee slot for that day (e.g 1 9-10am, 2 10-11am)
现在我有类似的东西:
bool johnMondaySchedule[7] = {true, true, true, true, true, true, true};
所以我有5个布尔数组,johnTuesday,johnWednesday等。每个真值代表时隙(0 = 9.10am,1 = 10-11am)。
但我有5个客户,每个客户每周有5天的时间表和7个时间段。 我觉得有25个布尔数组非常低效。
我怎么能这样做? 我需要能够轻松地预订其中一个时间段(通过提供3个元素,int对应于成员的名称,日期和时间段。
我还需要一种简单的方法来迭代这些并将它们打印到屏幕上。
我查看了哈希地图,元组,队列,但无法找到符合我需要的任何内容。
只做布尔数组吗?
答案 0 :(得分:0)
您可能想要创建一些封装您的概念的类。
#include <string>
#include <set>
#include <ctime>
struct Appointment
{
Appointment(std::string client, std::time begin, std::time duration);
const std::string &getClient() const { return mClient; }
std::time getTime() const { return mBegin; }
std::time getDuration() const { return mDuration; }
bool operator<(const Appointment &right)
{
if (mBegin != right.mBegin)
return mBegin < right.mBegin;
if (mClient != right.mClient)
return mClient < right.mClient;
return mDuration < right.mDuration;
}
private:
std::string mClient;
std::time_t mBegin;
std::time_t mDuration;
};
struct Schedule
{
typedef coll_type::const_iterator iterator;
bool makeAppointment(Appointment a);
iterator begin() const { return mAppts.begin(); }
iterator end() const { return mAppts.end(); }
private:
typedef std::set<Appointment> coll_type;
coll_type mAppts; // sorted by begin time first, client name second, duration third
};
您希望Schedule对象在您的约会集上强制执行不变量。像约会这样的事情只能在工作时间安排,或者客户不能有两个时间重叠的约会等。
您可能需要多种方法来为约会编制索引。因此,您可以轻松地迭代日期X和Y之间的“约翰”(或任何其他客户)的所有约会,或2015年3月27日(或任何其他日期)的所有约会。因此,您可能需要多个索引集合,这些集合引用相同的数据,但在Schedule对象中以不同的方式对其进行排序,以及根据您需要的搜索/视图类型返回不同迭代器的多个函数。