c++ boost::multi_index: iterator_to成员函数的顺序

C++ boost::multi_index: order of iterator_to member function

本文关键字:函数 成员 顺序 to index boost multi c++ iterator      更新时间:2023-10-16

读取boost::multi_index引用时,我发现iterator_to方法具有恒定顺序。这怎么可能呢?我的意思是,如果迭代器是一个不同于它所代表的value_type的对象,容器怎么可能在不搜索索引的情况下找到它们对应的内部节点?

我能想到的唯一解决方案是容器的"内部节点"(或无论它是什么)的地址与它持有的value_type相同(例如,将节点头放在value_type或其他东西的下面)。如果传递的实参是对内部value_type的引用,则可以通过实参的地址轻松构造相应的迭代器以获得红黑节点。

但! !c++标准中不能有两个具有相同地址的对象的限制呢?对齐,填充,填充这些在内存级别发生的事情呢?

你的直觉是正确的:值是一个更大的节点结构的一部分(如这里所解释的),iterator_to只是从value_type子对象的地址计算节点的地址。现在,所涉及的指针算术依赖于节点(或存储值的基类)是标准布局这一事实,这保证了指向第一个子对象(值)的指针可以转换为指向结构(节点)的指针:相关代码可以在这里查看。