将已命名的项目存储在查找表中

问题描述 投票:0回答:1

考虑以下课程

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;
          // ...
};
  1. 现在,我希望能够通过其ID查找一个人,并更新其名称。为此,我可以使用std::set<Person, PersonIdCompare>,但是如果没有const_cast,则无法修改记录。

  2. 将Persons存储在std::map<RegistrationId, Person>中会更好,因此可以更改记录,尽管这需要将id存储两次。

  3. 或者也许我应该使用地图,并从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 ...

c++ dictionary const data-consistency
1个回答
0
投票

在大多数情况下,最好将所有内容都放入(可能)排序的std::vector<Person>中。然后,您可以对向量进行二进制搜索以查找元素。封装矢量对象的小型便捷类将很有用。

© www.soinside.com 2019 - 2024. All rights reserved.