C++ boost多索引容器中modify和modify_键的区别

C++ boost多索引容器中modify和modify_键的区别,c++,boost,boost-multi-index,C++,Boost,Boost Multi Index,boost多索引容器中的modify和modify\u key之间有什么区别。我同时阅读了他们的文档,似乎找不到两者用法的区别 基本上这两种用法的区别(据我所知如下): 修改: 函子将被传递到已检索的整个对象的引用,并且函子可以修改此检索对象的任何成员 修改\u键: 函子只修改用于搜索和检索对象的键。例如,使用具有类的名称成员的索引来搜索容器,在对返回的迭代器应用modify_键时,名称成员将被更改 基本上,modify_key是modify的一个特例。modify_key是modify的一

boost多索引容器中的
modify
modify\u key
之间有什么区别。我同时阅读了他们的文档,似乎找不到两者用法的区别


基本上这两种用法的区别(据我所知如下):

  • 修改:

    函子将被传递到已检索的整个对象的引用,并且函子可以修改此检索对象的任何成员

  • 修改\u键:

    函子只修改用于搜索和检索对象的键。例如,使用具有类的名称成员的索引来搜索容器,在对返回的迭代器应用modify_键时,名称成员将被更改


基本上,modify_key是modify的一个特例。

modify_key
modify
的一个变体,当您要更改的元素的唯一部分是key本身时,它可以为您节省一些输入。例如,如果我定义一个
多索引容器
,例如:

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=...;
可以使用
modify_键写入

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

谢谢你的回答。正如我在回答中所说,我已经弄明白了这一点。接受详细答复。
auto it=...;
c.modify_key(it,[](int& x){x=3;});