在boost multi_index中插入后找不到

Cannot find after insertion in boost multi_index

本文关键字:插入 找不到 index boost multi      更新时间:2023-10-16

我创建了一个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"answers"getUId"返回0/非空值之后。

在这种情况下,当我尝试使用非唯一ID查找时,我无法获得存储的值。是否期望它们在插入时被填充?或者,如果它们在需要时更新,我仍然可以在那一刻查找我的值,这是可以的吗?

Edit1:

我知道我需要在索引更改时使用"replace"或"modify"来更新索引。所以它是它最初插入插入与空字符串作为一个索引的键和0为另一个索引,当我查找使用一个特定的值它不返回给我任何东西?这意味着如果我用空字符串"查找。它应该返回所有的值(因此查找时间为O(n))?

Edit2:我试着把所有的值映射到",空字符串。我还是没有得到结果。第一个迭代器等于end()。

同样,如果我想在对象的setter中设置值时,仅为中的一个更改非唯一键值对的键值,我该如何做?我希望每次通过对象的setter设置值时都这样做,这样我就可以使用我拥有的multi_index来查找它。

TIA

- r

根据您提供的少量上下文,人们只能猜测。如果

  • 你已经实现了boost::hash_valueoperator==正确为您的Id类(如果这真的是一个类,而不是一个别名的基本类型),
  • 您插入的所有元素都有一个空字符串作为IndexByNonUId索引的键,
  • 你真的设法插入一些东西(即容器不是空的),
  • 元素仍然有效(我看到它们的类型是Container *,所以它们可能会被删除或什么的),
  • 你没有改变元素的键,

那么IndexByNonUId索引中查找空字符串应该返回与空范围不同的东西。您可能需要检查上述所有子句