首页 > 编程语言 >c++的一些科技

c++的一些科技

时间:2024-07-21 20:40:46浏览次数:10  
标签:__ pbds gnu c++ 二叉 科技 tag heap 一些

pd_ds

需要

#include<bits/extc++.h>

using namespace __gnu_pbds;

using namespace __gnu_cxx

__gnu_pbds::priority_queue

注意可能会与std::priority_queue冲突。

定义方法:__gnu_pbds ::priority_queue<T, Compare, Tag, Allocator>

  • T:类型名

  • Compare:严格弱化的比较类型

  • Tag:__gnu_pbds提供的五种堆,默认为pairing_heap_tag

    • pairing_heap_tag:配对堆(配对堆是一个支持插入,查询/删除最小值,合并,修改元素等操作的数据结构,是一种可并堆。有速度快和结构简单的优势,但由于其为基于势能分析的均摊复杂度,无法可持久化)。在实际测试中表现最好。

    • binary_heap_tag:二叉堆,表现并不是如官方文档说的那么好。

    • binomial_heap_tag:二项堆(二项堆(binomial heap)是一种类似于二叉堆的堆结构。与二叉堆相比,其优势是可以快速合并两个堆,因此它属于可合并堆(mergeable heap)抽象数据类型的一种。),合并操作时表现优于二叉堆,取堆顶元素的复杂度比二叉堆高。

    • rc_binomial_heap_tag:冗余计数二项堆,表现貌似比二项堆好点。

    • thin_heap_tag:除了合并是\(O(n)\)的,其它和斐波那契堆一样。

      综合来看,Tag中默认的pairing_heap_tag综合表现最好,竞赛中常用的也是这个。

  • Allocator:空间配置器,不造是啥,反正在竞赛中基本不会设计,想了解的大佬建议百度

成员函数:

  • push():向堆中压入一个元素并返回改元素位置的迭代器
  • pop():弹出堆顶
  • top():返回堆顶元素
  • size():返回元素个数
  • empty():返回是否为空
  • modify(iterator ,key)将迭代器位置的key变为传入的key,并排序
  • erase(iterator):删除迭代器处的键值
  • join(__gnu_pbds::priority_queue &other):将other合并到*this中并将other清空

标签:__,pbds,gnu,c++,二叉,科技,tag,heap,一些
From: https://www.cnblogs.com/hzoi-Cu/p/18314922

相关文章

  • C++合作开发项目:美术馆1.0
    快乐星空MakerZINCFFO合作入口:CM工作室效果图:代码:(还有几个音乐!)main.cpp#include<bits/stdc++.h>#include<windows.h>#include<conio.h>#include<time.h>#include"music.h"usingnamespacestd;structCITYBLOCK{ stringi......
  • 一些高级函数的用法
    目录一,递归函数二,匿名函数1.匿名函数的定义2.匿名函数的特点和用法三,闭包以及闭包的使用1.何为闭包2.闭包的使用1.保持状态:2.回调函数:3.私有变量:4.注意事项四,特殊变量global和nonlocal的使用1.global关键字2.nonlocal关键字总结五,装饰器1.何为装饰器2.装饰......
  • LeetCode题(66,69,35,88)--《c++》
     66.加一////Createdbywxj05on2024/7/20.////法一classSolution{public:vector<int>plusOne(vector<int>&digits){boolcarry=true;//进位标志for(inti=digits.size()-1;i>=0&&carry;--i){......
  • 【C++11】lambda表达式
    目录lambda表达式function包装器bind绑定lambda表达式我们之前如果要对一组数据排序,我们可以调用sort,并且传一个仿函数对象或者函数指针或者调用库中的类模板并实例化成对象,比如:boolLess(inta,intb){ returna<b;}structGreater{ booloperator()(inta......
  • C++学习之路——第一天(结构体、C++程序从编写到运行)
    引子:兜兜转转还是你~C++数据类型int占用4个字节(32位机)char占用1个字节(8位机)short占用2个字节(16位机)long占用4个字节(32位机)float占用4个字节(32位机)double占用8个字节(64位机)longdouble占用16个字节(64位机)define和const的区别define在......
  • C++多线程编程中的锁详解
    在现代软件开发中,多线程编程是提升应用程序性能和响应能力的重要手段。然而,多线程编程也带来了数据竞争和死锁等复杂问题。为了确保线程间的同步和共享数据的一致性,C++标准库提供了多种锁机制。1.std::mutexstd::mutex是最基础的互斥锁,用于保护共享数据,防止多个线程同时访问......
  • C++ PDF PoDoFo库使用教程
    #include<podofo/podofo.h>#include<iostream>//AllPoDoFoclassesarememberofthePoDoFonamespace.//usingnamespacestd;usingnamespacePoDoFo;PdfFont*getFont(PdfDocument&doc);//Base14+othernon-Base14fontsforcomparis......
  • C++字体库开发之fontconfig使用五
    代码 #include<cassert>#include<algorithm>#include"fontconfig/fontconfig.h"#include<stdexcept>#include<iostream>#defineHAS_FALLBACK_CONFIGURATIONenumFontStyle:uint16_t{Regular=0,Italic=0x01......
  • c++中的文件操作
    前言hello,大家好啊,这里是文宇,不是文字,是文宇哦。C++中的文件操作是用于在程序中读取、写入和操作文件的一种重要功能。文件操作允许程序直接与外部文件进行交互,这对于数据的存储和读取非常有用。在C++中,文件操作主要通过iostream库中的fstream类来实现。fstream类提供了一种......
  • Linux下C++静态链接库的生成以及使用
    目录一.前言二.生成静态链接库三.使用静态链接库一.前言这篇文章简单讨论一下Linux下如何使用gcc/g++生成和使用C++静态链接库(.a文件)。二.生成静态链接库先看下目录结构然后看下代码//demo.h#ifndefDEMO_H#defineDEMO_H#include<string>classDemo{p......