首页 > 后端开发 > C++ > 正文

如何访问 STLpriority_queue 的底层容器?

Mary-Kate Olsen
发布: 2024-11-01 06:21:02
原创
494 人浏览过

How can I access the underlying container of an STL priority_queue?

访问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&amp; Container(priority_queue<T, S, C>& q) {
    struct HackedQueue : private priority_queue<T, S, C> {
        static S&amp; Container(priority_queue<T, S, C>& q) {
            return q.*&amp;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可以在以下链接找到:

  • [C : 标准模板库](https://en.cppreference.com/w/cpp/container)

结论

虽然没有标准的方法来访问STL容器的底层容器适配器,提供的解决方法专门为priority_queue提供了解决方案。对于堆栈和队列,如果可用,可以使用非标准 _Get_container() 方法。

以上是如何访问 STLpriority_queue 的底层容器?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!