C++ boost多索引容器中modify和modify_键的区别
boost多索引容器中的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的一
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;});