boostmulti_index_container中modify和modify_key的区别

The difference between modify and modify_key in boost multi_index_container

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

Link to the documentation

两者的用法基本区别(据我了解如下):

  • 修改:

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

  • Modify_Key:

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

基本上modify_key是修改的特例。

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;});