考虑以下课程
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添加了一个setter,这将破坏选项1和2,或者将ID的存储次数与选项2相同。]
考虑以下类类Person {public:显式Person(RegistrationNumber id,std :: string const&name); RegistrationId id()const; std :: string ...
在大多数情况下,最好将所有内容都放入(可能)排序的std::vector<Person>
中。然后,您可以对向量进行二进制搜索以查找元素。封装矢量对象的小型便捷类将很有用。