在boost multi_index中插入后找不到
Cannot find after insertion in boost multi_index
我创建了一个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_value
和operator==
正确为您的Id
类(如果这真的是一个类,而不是一个别名的基本类型), - 您插入的所有元素都有一个空字符串作为
IndexByNonUId
索引的键, - 你真的设法插入一些东西(即容器不是空的),
- 元素仍然有效(我看到它们的类型是
Container *
,所以它们可能会被删除或什么的), - 你没有改变元素的键,
那么在IndexByNonUId
索引中查找空字符串应该返回与空范围不同的东西。您可能需要检查上述所有子句
相关文章:
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 找不到QtResource文件中的文件
- VC++本机单元测试,找不到调试符号
- RegGetValue在当前用户下找不到名称
- 带有 -stdlib=libc++ 的 clang++ 9.0.1 找不到<optional>
- c++找不到具有相同哈希的无序集合元素
- 找不到以下加速库:boost_fiber
- 找不到 FLTK(缺少:FLTK_INCLUDE_DIR)
- 设置 Visual Studio for MPI: 找不到标识符错误
- "assimp/config.h"找不到,但它在文件夹中
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- C++系统找不到指定的文件错误
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- vcpkg 添加新库,但找不到
- 找不到最新插入到 std::map 中的键
- 在boost multi_index中插入后找不到