boost :: multi_index如何使用成员函数?

时间:2016-10-18 12:37:19

标签: c++ c++11 boost multi-index boost-multi-index

如果我有一个boost :: multi_index,如下所示,

typedef multi_index_container<
    employee,
    indexed_by<    
        hashed_unique<mem_fun<employee, std::string, &employee::getname> >,
        hashed_unique<mem_fun<employee, int, &employee::getage> >
    > 
> employee_set;

我理解插入此容器的类“employees”的对象以这样的方式存储,即可以在O(1)时间内检索(作为哈希映射)。

如果在程序过程中更新成员变量(名称,年龄)(例如可能使用setname或setage)并且仍然使用这些值进行哈希处理,它将如何存储?我理解错了吗?

TIA

-R

1 个答案:

答案 0 :(得分:1)

来自documentation

  

每个索引提供的迭代器都是常量,也就是说,它们指向的元素不能直接变异。这遵循有序索引的std::set接口,但对于其他类型(例如在std::list之后建模的顺序索引)可能会出乎意料,这种情况不会发生。 multi_index_container的工作方式强加了这种看似奇怪的行为;如果允许元素不加选择地变异,我们可能会在multi_index_container的有序索引中引入不一致,而不会通知容器。通过update operations在任何索引上正确完成元素修改。

换句话说,您只能const访问您存储的对象,除非您使用容器的更新功能,此时它可以挂接到呼叫并调整哈希值。飞。