处理需要在c ++中一起存储的3个int类型的正确方法?

时间:2015-03-27 02:01:22

标签: c++ arrays types elements

所以我只是想学习一些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对应于成员的名称,日期和时间段。

我还需要一种简单的方法来迭代这些并将它们打印到屏幕上。

我查看了哈希地图,元组,队列,但无法找到符合我需要的任何内容。

只做布尔数组吗?

1 个答案:

答案 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对象中以不同的方式对其进行排序,以及根据您需要的搜索/视图类型返回不同迭代器的多个函数。