有关STL关联/非关联容器/优先级队列的按序初始化

news2024/11/15 5:08:07

1.对于map/unorderedmap这种,比如想要按照second去排序,思路一,转换成vector这种线性容器,然后利用sort函数,自定义第三个参数去做想要的排序

总之就得转换成别的去做,不能在初始化的时候用自定义的函数或者lambda啥的去做手脚,去按值去排序,,注意是按值不行也就是second。但是对于键来说是可以的,按照如下套用方式

就是只能对键做操作:,你要是换成pair然后改成什么second比较一定是错的

bool cmp(int a,int b)
{
    return a>b;
}

     // 定义一个自定义比较函数并传递给 map 的构造函数
    map<int, int, decltype(&cmp)> treeMap(cmp);
    map<int, int, decltype(cmp)*> treeMap(cmp);
class Solution {
public:
    bool operator()(int a,int b)const
    {
        return a>b;
    }

};

    map<int, int, Solution> treeMap;
    map<int, int, Solution> treeMap1;

 完了用auto,lambda,functional都可以,,具体看下面的用优先级队列演示的!

记住map这种不能在构造时对值动手脚,要动只能后面转换成别的容器,然后在套用自定义的函数

2.对于想在初始化的时候做手脚,是我重点演示的:嗯..这里的话优先级队列存pair啥的可以对值去更改,对于map这种em不就行了,只能去改键的规则

std::mapstd::unordered_map这两种数据结构的设计原则和底层实现决定了它们不能在构建时直接按值更改排序方式。

  1. std::map是基于平衡二叉搜索树实现的关联容器,其中的元素会根据键自动排序。在std::map中,每个节点都包含一个键值对,左子树中的所有节点的键小于父节点的键,右子树中的所有节点的键大于父节点的键。这样的设计使得std::map可以在对数时间内完成插入、删除和查找操作。由于std::map的底层实现依赖于键的顺序,因此不能直接在构建时按值排序。

  2. std::unordered_map是基于哈希表实现的关联容器,它不对元素进行排序。在std::unordered_map中,元素的位置由键的哈希值决定,元素被分配到不同的桶中。这样的设计使得std::unordered_map在平均情况下可以在常数时间内完成插入、删除和查找操作。由于std::unordered_map的底层实现与元素的顺序无关,因此也不能直接在构建时按值排序。

然而,对于std::priority_queue,您可以在构建时指定自定义的比较函数,以便根据std::pair中的值进行排序。std::priority_queue是基于堆实现的,它允许在构建时指定一个比较函数

下面看几种写法:我拿23题做例子,你里面存pair啥都行一个道理

1.

class Solution {
public:  
  bool operator()(ListNode *a,ListNode*b)const
    {
        return a->val>b->val;
    }
};
    priority_queue<ListNode*,vector<ListNode*>,Solution> que;

2.

    static bool cmp(ListNode *a,ListNode*b) 
 //全局函数就行,只不过我在题的类里写的 所以加了static
    {
         return a->val>b->val;
    }
 priority_queue<ListNode*,vector<ListNode*>,decltype(&cmp)> que(cmp);
 priority_queue<ListNode*,vector<ListNode*>,decltype(cmp)*> que(cmp);

3.

       auto cmp1=[](ListNode *a,ListNode*b)
    {
         return a->val>b->val;
    };
    priority_queue<ListNode*,vector<ListNode*>,decltype(cmp1)> que(cmp1);

4.

    static bool cmp(ListNode *a,ListNode*b)
    {
         return a->val>b->val;
    }


    function<bool(ListNode *a,ListNode*b)>fun(cmp);
    priority_queue<ListNode*,vector<ListNode*>,decltype(fun)> que(fun);

5.

       auto cmp1=[](ListNode *a,ListNode*b)
    {
         return a->val>b->val;
    };

    function<bool(ListNode *a,ListNode*b)>fun(cmp1);
    priority_queue<ListNode*,vector<ListNode*>,decltype(fun)> que(fun);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JLINK驱动、接线、接口模式、硬件都没问题,JLINK仍然读不到芯片的解决办法

今天遇到一个奇葩的问题&#xff0c;JINK驱动、接线、模式设置&#xff0c;硬件啥都没有问题&#xff0c;就是JINK连不到芯片&#xff0c;读不到芯片。自己平时都是用SWD模式&#xff0c;然后直接JLINK的GND 、SWDIO、SWCLK直接接上&#xff0c;一般我不会接VCC&#xff0c;应该…

Leetcode 75算法题( 下)(使用C++实现)

目录 回溯 17. 电话号码的字母组合 216. 组合总和 III 动态规划 - 一维 1137. 第 N 个泰波那契数 746. 使用最小花费爬楼梯 198. 打家劫舍 790. 多米诺和托米诺平铺 动态规划 - 多维 62. 不同路径 1143. 最长公共子序列 714. 买卖股票的最佳时机含手续费 72. 编辑距…

提升前端GIS开发技能:深入了解5个热门地图框架

前言 地理信息系统&#xff08;GIS&#xff09;已经成为现代应用开发中不可或缺的一部分&#xff0c;尤其在前端开发中。随着Web技术的快速发展&#xff0c;许多强大而灵活的GIS框架涌现出来&#xff0c;为开发人员提供了丰富的工具和功能&#xff0c;使他们能够创建交互式、高…

强大易用的开源建站工具Halo

最近无意间看到别人的博客外观非常美观&#xff0c;便萌生了偷师学艺的想法…所以就看到看了Halo这个开源的建站项目,其实使用起来非常简单&#xff0c;但是想要做一个类似的开源建站工具&#xff0c;谈何容易 访问官网 https://halo.run/ 使用docker部署 搜索镜像halo do…

OpenAI接口代理设置

国内使用OpenAI接口&#xff0c;需要设置代理&#xff0c;代理的设置有两种方法&#xff0c;局部的方法和全局的方法&#xff0c;推荐局部设置的方法&#xff0c;它不会影响你使用gradio/flask等框架&#xff0c;如果使用全局设置&#xff0c;会影响gradio/flask等的使用。 局部…

Tree树形控件做权限时,保持选项联动的同时,解决数据无法回显的问题

项目需求&#xff1a; 要求树形控件要有父子联动&#xff0c;也就是选择父级选项&#xff0c;子级也要选中&#xff0c;那么check-strictly属性就不能设置死,我的是 :check-strictlycheckStrictly,在data中赋值有变量。我之前设置check-strictly&#xff0c;就没了联动效果&…

HR必读的四本书籍推荐

作为一名人力资源管理者&#xff0c;除了在实际工作中积累经验&#xff0c;还需要不断地学习和进修&#xff0c;以应对日益变化的企业管理挑战。但是&#xff0c;在人力资源管理这个领域&#xff0c;有太多的书籍、课程和文章可供选择&#xff0c;这让人不免有些困惑。因此&…

《横向领导力》

在介绍《横向领导力》之前&#xff0c;有必要先推荐另一本同类书籍——《经理人参阅&#xff1a;领导力提升》。这本书来自经理人参阅ManagerReads&#xff0c;涵盖了领导力的许多概念和技能&#xff0c;对于想要全面提升领导力的人员来说是非常有价值的。不过&#xff0c;对于…

9.pixi.js编写的塔防游戏(类似保卫萝卜)-群炮弹发射逻辑

游戏说明 一个用pixi.js编写的h5塔防游戏&#xff0c;可以用electron打包为exe&#xff0c;支持移动端&#xff0c;也可以用webview控件打包为app在移动端使用 环境说明 cnpm6.2.0 npm6.14.13 node12.22.7 npminstall3.28.0 yarn1.22.10 npm config list electron_mirr…

MATLAB 投资问题

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

【子序列+状压DP】ABC308 E MEX

这应该算是很套路的题&#xff0c;照理说是要做出来的 E - MEX (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;三元组很容易让我们联想到枚举中间那个元素&#xff0c;但是在这道题中不是这么搞的 可以注意到&#xff0c;题目是要我们统计所有子序列&qu…

WinSCP脚本实现将jar包一键上传Ubuntu并docker部署

准备 首先&#xff0c;在Ubuntu写一个.sh脚本用于自动更新jar包的docker容器和镜像&#xff0c;然后在Windows写一个.bat脚本用于上传jar包并运行.sh脚本。 deploy.sh # Kill容器 docker kill demo# 删除容器 docker rm demo# 删除镜像 docker rmi my/demo# 构建镜像 docker b…

Spring事务@Transactional常见的8种失效场景(通俗易懂)

前言&#xff1a;在日常的开发过程中&#xff0c;多多少少会遇到Spring事务失效导致的一些事故&#xff0c;本篇主要通过具体的案例分析来讲解常见的8种失效的场景&#xff0c;让阅读者通俗易懂的明白每一种事务失效的原因&#xff0c;知其然并知其所以然&#xff01; 目录 一…

Java——《面试题——Git篇》

全文章节 Java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java——…

初识操作系统以及Linux常用指令(上)

目录 一&#xff1a;操作系统简介 二&#xff1a;Linux简介 Linux是什么 Linux的作用 非图形化的Linux界面 Linux环境的搭建 三&#xff1a;Linux下的文件结构 ⭐Linux组织文件的结构为多叉树 文件路径 Linux下的隐藏文件 四&#xff1a;Linux基础指令 创建用户相…

实践:devops之云主机模式持续部署(ci-cd)

实践&#xff1a;devops之云主机模式持续部署(ci-cd) 目录 推荐文章 https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》 0、流程分析 2条Jenkins pipeline CI pipeline CD pipeline 标准规范 项目规范与总体设计 公司里面要使用流水线要做持续集成CI/CD的项目越来…

02-基础入门-数据包拓展

基础入门-数据包拓展 基础入门-数据包拓展1、http/https数据包&#xff08;1&#xff09;HTTP协议是什么&#xff1f;&#xff08;2&#xff09;HTTP原理&#xff08;3&#xff09;HTTP特点&#xff08;4&#xff09;URI和URL的区别&#xff08;5&#xff09;HTTP报文组成&…

IP路由协议(RIP、IGRP、OSPF、IS-IS、BGP)

文章目录 1、路由分类2、RIP协议1&#xff09;RIP的工作原理2&#xff09;RIP路由表的更新过程3&#xff09;RIP路由表的更新原则4&#xff09;RIP的特性5&#xff09;RIP协议的版本 4、IGRP协议1&#xff09;IGRP路由表的更新2&#xff09;IGRP的度量标准 5、OSPF协议1&#x…

Java【动态规划】斐波那契数列模型, 图文详解 + 代码

文章目录 一、第 N 个泰波那契数1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 二、三步问题1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 三、1, 题目2, 思路分析2.1, 状态…

Redis 高可用和优化

目录 一&#xff1a;Redis 高可用 二&#xff1a; Redis 持久化 1、持久化的功能 2、Redis 提供两种方式进行持久化 3、 RDB 持久化 &#xff08;1&#xff09;触发条件 &#xff08;1.1&#xff09;手动触发 &#xff08;1.2&#xff09;自动触发 &#xff08;1.3&am…