【发布时间】:2016-10-20 02:10:44
【问题描述】:
我创建了一个 boost multi_index,我在其中插入对象。
我的 multi_index 如下所示,
typedef boost::multi_index_container<
Container*,
boost::multi_index::indexed_by<
boost::multi_index::hashed_unique<
boost::multi_index::tag<IndexByUniqueId>,
boost::multi_index::const_mem_fun<StoreMe, Id, &StoreMe::getUId>
>,
boost::multi_index::hashed_non_unique<
boost::multi_index::tag<IndexByNonUId>,
boost::multi_index::const_mem_fun<StoreMe, std::string, &Container::getNUIdString>
>
>
> mi_Container;
当我插入对象时,非唯一 ID 和唯一 ID 最初不存在于对象中。在程序的后期,它们会得到更新,只有在“getNUIdString”和“getUId”之后才会返回 0/非空值。
在这种情况下,当我尝试使用非唯一 ID 进行查找时,我无法获取存储的值。是否期望它们在插入时被填充?或者,如果它们在需要时更新并且我仍然可以在那个时候查找我的值,是否可以?
编辑1:
我了解在更改索引时我需要使用“替换”或“修改”来更新索引。那么是不是它最初在插入插入时使用空字符串作为一个索引的键和 0 作为另一个索引的键,并且当我使用特定值查找时它没有返回任何东西?这意味着如果我使用空字符串“”查找。它应该返回我所有的值(因此将是查找时间 O(n))?
编辑2: 我尝试将所有值映射到“”,空字符串。我仍然没有结果。这对迭代器中的第一个等于 end()。
另外,如果我想在该对象的设置器中设置值时,只更改一个非唯一键值对的键值,我该怎么做?每次通过对象的 setter 设置值时,我都想这样做,这样我就可以使用我拥有的 multi_index 来查找它。
TIA
-R
【问题讨论】:
标签: c++ boost multi-index boost-multi-index