首页 > 其他分享 >容器内部使用的比较函数书写方式

容器内部使用的比较函数书写方式

时间:2023-08-18 23:02:49浏览次数:48  
标签:std 容器 compare pq return 函数 int 书写 priority

例如:priority_queue为例子。

#include <queue>

std::priority_queue<Type, Container, Compare> pq;

type:优先队列中存储的元素的数据类型。

Container:存储元素的底层容器类型,默认为std::vector<Type>

Compare:比较函数或函数对象,用于定义元素的比较原则,可以是一个函数指针、函数对象或者Lambda表达式,默认为std::less<Type>

举例说明一下

1、使用函数指针:

#include <iostream>
#include <queue>

using namespace std;

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

int main() {
    typedef bool (*CompareFunction)(int, int);
    CompareFunction comparePtr = compare;
		// CompareFunction是函数指针
    	// pq对象里面要给一个函数地址信息
    std::priority_queue<int, std::vector<int>, CompareFunction> pq(comparePtr);
    // 向 pq 中添加元素

    return 0;
}

2、使用函数对象:

#include <queue>

struct Compare {
    bool operator()(int a, int b) {
        return a > b; // 小于符号反转,以获得大顶堆效果
    }
};

// 函数对象,即Compare就行,给对象

int main() {
    std::priority_queue<int, std::vector<int>, Compare> pq;
    // 向 pq 中添加元素
    return 0;
}

3、使用Lambda表达式

#include <queue>

int main() {
    auto compare = [](int a, int b) {
        return a > b; // 小于符号反转,以获得大顶堆效果
    };
    // decltype是关键字,用于推导表达式或者函数的类型。这里就推导compare为Lambda类型,然后给pq对象传入对应的类型。
    std::priority_queue<int, std::vector<int>, decltype(compare)> pq(compare);
    // 向 pq 中添加元素
    return 0;
}

标签:std,容器,compare,pq,return,函数,int,书写,priority
From: https://blog.51cto.com/u_14834110/7142037

相关文章

  • 容器内部使用的比较函数书写方式
    例如:priority_queue为例子。#include<queue>std::priority_queue<Type,Container,Compare>pq;type:优先队列中存储的元素的数据类型。Container:存储元素的底层容器类型,默认为std::vector<Type>Compare:比较函数或函数对象,用于定义元素的比较原则,可以是一个函数指针、函数对象......
  • 容器内部使用的比较函数书写方式
    例如:priority_queue为例子。#include<queue>std::priority_queue<Type,Container,Compare>pq;type:优先队列中存储的元素的数据类型。Container:存储元素的底层容器类型,默认为std::vector<Type>Compare:比较函数或函数对象,用于定义元素的比较原则,可以是一个函数指针、函数对象......
  • url函数和path函数的区别??
    在Django中,path()和url()都是用于定义URL路由的函数,但它们有一些区别:path()函数:path()函数是Django2版本中引入的新函数,用于定义URL路由。它使用简单的字符串匹配来匹配URL,不支持正则表达式。在path()中,斜杠/被用作路径分隔符,而不需要使用正则表达式中......
  • iwebsec-sql注入 12 等价函数替换过滤
    01、题目分析依旧是对等号进行了过滤,那么可以尝试一些等价值的内容来替换等号02、手工注入依旧是对等号进行了过滤,那么可以尝试一些等价值的内容来替换等号,比如like,rlike,regexp替换,id=1可以用idlike1以及id>0andid<2以及!(id<>1)进行绕过--查询行数?id=1order......
  • 无涯教程-Perl - values函数
    描述此函数返回HASH中包含的所有值的列表。在标量context中,返回将返回的值的数量。使用由each和keys函数使用的相同迭代器,因此使用顺序。语法以下是此函数的简单语法-valuesHASH返回值此函数在标量context中返回哈希值中的值数,在列表context中返回值列表。例以下是......
  • 星火大模型 VS FuncGPT(慧函数), 谁更胜一筹?
    哈喽,本文即通过相近的试题,看下最近爆火的科大讯飞星火大模型和FuncGPT(慧函数)的编码能力有何区别,给大家直观地对比。开发过程中经常会遇到读取文件内容的情况,需要【判断文件路径是目录还是文件】,及文件编码格式,防止无法读取内容或乱码出现情况。星火大模型生成代码示例如下:impor......
  • 深入理解后端开发中的微服务架构与容器化
    在现代的应用开发中,微服务架构和容器化技术已成为热门的话题。它们可以帮助构建高度可扩展、灵活、可维护的后端系统。本文将深入探讨微服务架构和容器化技术的原理、优势以及如何在后端开发中应用它们。什么是微服务架构?微服务架构是一种将应用拆分成一组小型、自治的服务的设计方......
  • 《Javascript中关于this作用域的箭头函数,普通函数以及回调函数中的特殊作用》
    开言这篇文章的内容很简单,一句话就是“涉及this指向谁”!!!但是涉及JavaScript的普通函数,箭头函数,WIndow,回调,Object等各种知识点其糅杂在一起,其知识点会很混乱,我们要理性头绪!!简单来说,普通函数可以看做管理严格的孩子,箭头函数是一个自由自在的孩子因此,在object中,使用箭头函数很危......
  • 在 docker 中设置容器自动启动---九五小庞
    1、使用dockerrun命令运行时增加--restart=always参数即可2、使用docker-compose命令运行时在yml文件中,需要自启动的service下增加restart:always项目即可3、已运行的容器修改其自启动策略执行命令:dockerupdate--restart=always容器名或容器IDdockercon......
  • 在 docker 中设置容器自动启动--九五小庞
    1、使用dockerrun命令运行时增加--restart=always参数即可2、使用docker-compose命令运行时在yml文件中,需要自启动的service下增加restart:always项目即可3、已运行的容器修改其自启动策略执行命令:dockerupdate--restart=always容器名或容器IDdockercon......