boostmulti_index_container中modify和modify_key的区别
The difference between modify and modify_key in boost multi_index_container
boost multi_index_container 中 modify
和 modify_key
有什么区别?我都阅读了他们的文档,但我似乎无法找到两者用法之间的区别。
两者的用法基本区别(据我了解如下):
修改:
向仿函数传递了对检索到的整个对象的引用,并且仿函数可以修改此检索到的对象的任何成员。
Modify_Key:
仿函数仅修改用于搜索和检索对象的键。例如,使用 class 的 name 成员的索引来搜索容器,在返回的迭代器上应用 modify_key 时,名称成员将被更改.
基本上modify_key是修改的特例。
modify_key
是 modify
的变体,当您想要更改的元素的唯一部分是键本身时,它可以节省您一些输入。例如,如果我定义一个 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;});
boost multi_index_container 中 modify
和 modify_key
有什么区别?我都阅读了他们的文档,但我似乎无法找到两者用法之间的区别。
两者的用法基本区别(据我了解如下):
修改:
向仿函数传递了对检索到的整个对象的引用,并且仿函数可以修改此检索到的对象的任何成员。
Modify_Key:
仿函数仅修改用于搜索和检索对象的键。例如,使用 class 的 name 成员的索引来搜索容器,在返回的迭代器上应用 modify_key 时,名称成员将被更改.
基本上modify_key是修改的特例。
modify_key
是 modify
的变体,当您想要更改的元素的唯一部分是键本身时,它可以节省您一些输入。例如,如果我定义一个 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;});