访问STL容器适配器的底层容器
标准模板库(STL)提供了stack、queue和priority_queue等容器适配器,它提供了一个方便的接口,同时在底层容器上提供了一个抽象层。然而,这些适配器中缺乏访问底层容器的标准化方法。
当前实现
在 STL 的某些实现中,例如 Microsoft 的 Visual Studio 2008 中,有一个名为 _Get_container() 的非标准方法可用于堆栈和队列。然而,priority_queue 不存在这样的方法。
访问priority_queue 中的底层容器
尽管缺乏标准方法,但已经设计了一种解决方法:
<code class="cpp">template <class T, class S, class C> S& Container(priority_queue<T, S, C>& q) { struct HackedQueue : private priority_queue<T, S, C> { static S& Container(priority_queue<T, S, C>& q) { return q.*&HackedQueue::c; } }; return HackedQueue::Container(q); }</code>
此代码定义了一个利用嵌套私有类的辅助函数 Container() HackedQueue 访问底层容器 c.
用法
通过此解决方法,您可以按如下方式访问priority_queue 的底层容器:
<code class="cpp">priority_queue<SomeClass> pq; vector<SomeClass>& tasks = Container(pq);</code>
官方文档
官方文档STL可以在以下链接找到:
结论
虽然没有标准的方法来访问STL容器的底层容器适配器,提供的解决方法专门为priority_queue提供了解决方案。对于堆栈和队列,如果可用,可以使用非标准 _Get_container() 方法。
以上是如何访问 STLpriority_queue 的底层容器?的详细内容。更多信息请关注PHP中文网其他相关文章!