考虑下面的类
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 存储在 a 中是否更好
std::map<RegistrationId, Person>
,这样可以更改记录,尽管这需要将 id 存储两次。或者也许我应该使用地图,并从
Person
班级中删除 id。Person
但是,如果我只能访问, 而不是,则我无法获得 idstd::pair<RegistrationNumber const, Person>
,因此这可能需要传递这些对。
什么选项最有效或最不容易出错。想一想有人为 person id 添加一个 setter 的场景,这会破坏选项 1 和 2,或者将 id 存储为选项 2 的两倍。