boost multi_index_container中modify和modify_key的区别

时间:2016-02-15 14:12:04

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

boost multi_index_container中modifymodify_key之间的区别是什么?我读了他们的文件,我似乎无法找到两者的用法之间的区别。

Link to the documentation

2 个答案:

答案 0 :(得分:2)

modify_keymodify的变体,当您要更改的元素的唯一部分是键本身时,可以为您节省一些输入。例如,如果我定义multi_index_container,例如:

struct element
{
  int x;
  int y;
};

using namespace boost::multi_index;

using container=multi_index_container<
  element,
  indexed_by<
    ordered_unique<member<element,int,&element::x>>
  >
>;

container c=...;

然后是以下内容:

auto it=...;
c.modify(it,[](element& e){e.x=3;});

可以用modify_key编写为

auto it=...;
c.modify_key(it,[](int& x){x=3;});

答案 1 :(得分:0)

基本上两者的用法之间的差异(据我所知,如下):

  • 修改:

    函数传递对已检索的整个对象的引用,并且仿函数可以修改此检索对象的任何成员。

  • Modify_Key:

    仿函数仅修改用于搜索和检索对象的键。例如,使用带有 name 成员的索引来搜索容器,在返回的迭代器上应用modify_key后,名称成员将被更改。

基本上,modify_key是修改的特例。