我正在使用 boost::multi_index 以及我想根据其大小进行索引的数据类型。然而,该数据类型的 size() 成员函数的执行成本很高。 multi_index 是否缓存从其键提取器获取的值?
例如,如果我创建了一个带有有序索引和成员函数键 (element.size()) 的 multi_index 容器,并插入了一个元素,该元素的大小将其放置在容器中间的某个位置,那么容器是否会重新调用 size () 成员函数对其访问的所有元素进行遍历,同时遍历其内部数据结构,然后找到正确的插入点?
I am using boost::multi_index with a data type I'd like to index based on its size. However, the size() member function of this data type is expensive to execute. Does multi_index cache the values it gets from its key extractors?
For example, if I created a multi_index container with an ordered index with a member function key (element.size()), and inserted an element whose size put it somewhere in the middle of the container, would the container re-invoke the size() member function on all the elements it visits while traversing its internal data structure before finding the right insertion point?
发布评论
评论(1)
好吧,成员函数索引器的文档说它们调用引用的成员函数: http://www.boost.org/doc/libs/1_46_0/libs/multi_index/doc/reference/key_extraction.html#key_extractors
但是当有疑问时,配置文件:
给出以下内容输出(使用 Boost 1.46):
所以,答案似乎是“不,它不缓存值”。
Well, the documentation for member function indexers says they call the referenced member function: http://www.boost.org/doc/libs/1_46_0/libs/multi_index/doc/reference/key_extraction.html#key_extractors
But when in doubt, profile:
Gives the following output (using Boost 1.46):
So, it appears the answer is no, it doesn't cache values.