哈希表的运算符[]重载

时间:2019-06-02 18:21:43

标签: c++ operator-overloading hashtable

我想重载[]运算符以用于我必须做的家庭作业的哈希表中。 我正在使用包含对的列表向量。std::vector <std::forward_list<std::pair<std::string, int>>> 我想要操作员执行的操作是返回给定对的另一部分,例如,如果存在对(“ test”,21),则通过写vectorname [“ test”]我应该得到21,或者如果我写入vectorname [“ test”] = 22时,应该修改该对。此外,不应有相同的键,或者如果要使用相同的键,则仅考虑第一个。 这是我的第一个堆栈溢出问题,对不起,如果我没有很好地说明问题。

1 个答案:

答案 0 :(得分:0)

为了执行这种操作,您需要让operator []返回一个类似引用的类型,该类型可以分配给该类型(以便更新表)或仅用于(读取哈希表时)。您需要决定的关键是在表中没有键时该怎么办。

  • 立即将密钥添加到表中。这意味着当您尝试读取不存在的键时,会将其添加到具有默认值的表中(这是STL映射的工作方式)
  • 在您实际分配给元素之前,不要添加键。这是更多工作,但是允许您在没有默认构造函数的情况下拥有键值。

在前一种情况下,您只需返回对元素值的实际引用。在后一种情况下,您需要实现一个自定义的element_ref类,该类​​可以分配给( <tr *ngFor="let pago of comprasVentasForm.tablaPagos"> <th>{{pago.numeroCuota}}</th> <th>{{pago.fechaPago.format('YYYY-MMM-DD')}}</th> <th>{{pago.valorCuota}}</th> </tr> ),也可以隐式转换为元素值类型(在您的情况下为operator=)。