【问题标题】:std::map design : use a std::string for the map key and the stored object name (member)std::map 设计:使用 std::string 作为映射键和存储的对象名称(成员)
【发布时间】:2016-07-28 03:56:37
【问题描述】:

我试图找到设计命名对象存储的最佳方法:std::map

我想使用 std::map,其中 key 是对象的名称。另一方面,我希望我的对象本身是可识别的,例如使用 getName() 方法并返回该名称。让我恼火的是,除了设置 std::string 的两个副本之外,我没有找到更好的方法,一个用于键,一个在对象内部作为成员。

如果有人有建议?

编辑:

基本上,这是一个资源管理器。最重要的是找到他名字的资源。但有时,当我手下只有资源时,我希望能够知道他的名字。首先,我想到了一个向量……但是循环的想法让它找到了合适的对象,并询问每个对象的名字以找到正确的对象。

【问题讨论】:

  • 抱歉,我的意思是说:boost multi_index_container 会允许这样做,但这是您可能不想要的额外复杂性。
  • 是的。我正在寻找一种易于用作 std::map 的解决方案。我正在考虑从对象中删除名称并使用迭代器来识别它,但我不喜欢在地图管理之外的其他地方使用 std::map 的一部分。
  • 是的,这是标准库中所有关联容器的限制。话虽如此,大多数问题都可以用“命名”和“做”作为独立的概念来表达,因此通常将它们分开是合适的。

标签: c++ key stdstring stdmap


【解决方案1】:

你确定你对内存有这么严格的要求吗? 如果是,我认为您可以为对象名称创建任何“哈希”函数,如下所示:

int hash( const std::string& obj_name );

然后使用

std::multimap<int, NamedObject>

但这似乎是额外的复杂性

【讨论】:

  • 这样你不会保存对象名称的副本,但每次你必须调用散列函数
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-06
  • 2012-10-04
相关资源
最近更新 更多