【发布时间】:2020-06-16 04:06:27
【问题描述】:
考虑下面的类
class Person
{
public:
explicit Person(RegistrationNumber id, std::string const& name);
RegistrationId id() const;
std::string const& name() const;
Person& name(std::string const&);
// ...
private:
RegistrationNumber m_id;
std::string m_name;
// ...
};
现在我希望能够通过 id 找到一个人,并更新其姓名。为此,我可以使用
std::set<Person, PersonIdCompare>,但如果没有const_cast,我将无法修改记录。将 Persons 存储在
std::map<RegistrationId, Person>中是否更好,这样可以更改记录,尽管这需要存储两次 id。或者我应该使用地图,并从
Person类中删除 id。但是,如果我只能访问Person而不是std::pair<RegistrationNumber const, Person>,则我无法获取 id,因此这可能需要传递这些对。
什么选项最有效或最不容易出错。想一想有人为人员 ID 添加设置器的场景,这会破坏选项 1 和 2,或者将 ID 存储两次作为选项号 2。
【问题讨论】:
-
数据集中有多少人?对于小型数据集,通过向量的线性遍历非常快。
-
@NathanOliver 我也希望能够强制不重复的条目,并且拥有不变的位置也很好。
-
在这种情况下使用选项 2。当您已经在使用基于节点的容器时,每个对象一个额外的 int 并不多。
标签: c++ dictionary constants data-consistency