使用名称作为键值和生日值作为值的字典实现

问题描述:

对于此作业,您将执行字典以跟踪亲朋好友的姓名和生日。你应该能够做到以下操作:使用名称作为键值和生日值作为值的字典实现

  • 添加一个条目
  • 删除条目
  • 搜索字典的生日给定名称
  • 显示在每个项目的名字和生日字典
  • 列表中的所有人在字典中谁是出生在一个给定月份

    搜索关键字的名称,你可以假设名称是未神游。

    对于这个任务,我已经实现了除了同一个生日以外的大部分课程。这就是我计划为同一生日班开展的活动。

    void Dict::sameBirthday() 
    { 
    for (int i = 0; i < itemcount; i++) 
    { 
         if(item[i].getDate() == item[i+1].getDate()) 
         { 
          int index = i; 
          cout << item[index].getName() << "\n"; 
         } 
    
    } 
    } 
    

    测试是真不明白,所以我只是做一个计数器只是为了看看有多少我会得到和它只是给了我1个增量。我想得到3,因为我已经宣布3人有相同的出生日期。对于这一类,关键是名称和存储顺序,值是可以通过搜索名称获得的出生日期

感谢帮助。

+0

“感觉”意味着你没有真正测试过它。如果是这样的话,那就先做。一旦你*测试了它,你应该能够解释问题是什么。 –

+0

你可以创建一个反向映射,如'std :: map > birthday_to_name_map'。然后访问同一个生日的每个人的名单是微不足道的。 – paddy

+0

您当前编写的代码只会输出存储在数据结构中的_adjacent elements_中的一对名称中的第一个。如果您存储按出生日期排序的记录,则这可能接近成为解决方案。但这似乎不太可能。在数据结构末尾访问一个元素时,您也有一种边界情况,这很可能是未定义的行为。 – paddy

是的!感谢稻田。我犯了一个错误,我只是比较值,看看哪一个在数组中具有相同的值,而不给出要查找的值。因此,我可以使用输入值列出具有相同值的键。再次感谢稻田!

void Dict::sameMonth(string month) 
{ 

    for (int i = 0; i < itemcount; i++) 
    { 
     if (month == item[i].getMonth()) 
     { 
      cout << item[i].getName()<< " - "; 
     } 
    } 
    cout << endl; 
    }