C++重载运算符 < priority_queue 相关(个人笔记)

本来想用 priority_queue 去写个bfs。结果重载运算符忘了。ORZ。

然后看书和问别人熟悉了一下,记录一下。

struct lx
{
    int x,y,lv;
};

有一个这样的结构体。x,y,是坐标,lv 是它的权。重载<。

struct lx
{
    int x,y,lv;
    friend bool operator<(lx a,lx b)
    {
        return a.lv>b.lv;
    }
};

friend !友员

或者

struct lx
{
    int x,y,lv;
    bool operator < (lx a)const
    {
        return lv>a.lv;
    }
};

要通过STL 必须加上const 修饰。

然后就可以直接

priority_queue<lx> q;

或者不写重载,自己定义priority_queue的Compare函数

struct cmp
{
    bool operator()(lx a,lx b)
    {
        return a.lv<b.lv;
    }
};
priority_queue<lx,vector<lx>,cmp>q;

感觉还是重载了。。。。就这样吧,马上去用priority_queue 去优化一下bfs。

时间: 2024-10-08 10:50:29

C++重载运算符 < priority_queue 相关(个人笔记)的相关文章

重载运算符语法讲解

重载运算符 这篇随笔我来讲解一下C++语言中重载运算符的相关知识. 一.重载运算符的用途 这是一个比较哲学的问题:我们为什么要重载运算符? 理由就是,我们C++语言中已经给出的运算符(包括算数运算符和逻辑运算符)只是针对C++语言中已经给定的数据类型进行运算,假如我们想要对我们的自定义数据类型进行运算的话,则需要重载运算符,我们可以把重载运算符理解成对已有的运算符的一种重新定义. 比如: double a,b,c; a=1/3; b=1/2; c=a+b; printf("%lf",c

C++运算符重载为友元函数学习笔记

初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 下面的两种情况发生,则我们需要将运算符重载为类的友元函数 <1>成员函数不能满足要求 <2>普通函数又不能访问类的私有成员时 举例说明: class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ }; Complex operator+(double r); };

简单重载运算符in priority_queue By cellur925

我们都知道priority_queue是大根堆. 一.变成小根堆 法一:把元素的相反数丢进堆中 法二 priority_queue<int,vector<int>,greater<int> >q; 二.重载运算符 有时候我们的优先队列中的元素可能是结构体类型的.这时候我们可能需要重载一下运算符. 比如这样 struct cellur{ int val,num; }; priority_queue<cellur>q; bool operator < (c

C++自学笔记_重载运算符_《C++ Primer》

#include <iostream> #include <stdexcept> using namespace std; class CheckedPtr{ public: CheckedPtr(int *b,int *e,int *c): beg(b),end(e),curr(c){ } CheckedPtr(const CheckedPtr &obj): //复制构造函数 beg(obj.beg),end(obj.end),curr(obj.curr){ } Chec

运算符重载(复杂的相关计算)

运算符重载实际上是一种特殊的函数重载,你必须定义一个函数.并告诉C++翻译器,当遇到重载运算符调用该函数.该功能称为运算符重载函数,通常类的成员函数.    定义运算符重载函数的一般格式: 返回值类型 类名::operator重载的运算符(參数表) {--} operator是keyword.它与重载的运算符一起构成函数名. 因函数名的特殊性.C++编译器能够将这类函数识别出来. 详细的加减乘除等代码运算例如以下: <span style="font-size:18px;">

C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的非explicit构造函数定义一个隐式转换.当提供了实參类型的对象须要一个类类型的对象时.编译器将使用该转换. 于是:这样的构造函数定义了到类类型的转换. 除了定义到类类型的转换之外,还能够定义从类类型到其它类型的转换.即:我们能够定义转换操作符,给定类类型的对象.该操作符将产生其它类型的对象.和其它转换一样,编译器将自己主动应用这个转换. 一.转换为什么实用? 定义一个SmallInt的类,该类实现安全小整

重载与命名空间(学习笔记)

时间:2014.07.01 地点:基地 ----------------------------------------------------------------------------------------- 命名空间对函数匹配的影响主要表现在:使用using声明或using指示能将某些函数添加到候选函数集(不同版本)中. 一.与实参相关的查找与重载 对于接受类类型实参的函数而言,其名字查找是在实参的类所在的命名空间中进行.我们将在实参类以及实参类的基类所属的命名空间中搜寻候选函数.这

优先队列重载运算符&lt; 以及初始化列表

优先队列定义 priority_queue<int, vector<int>, greater<int> >pq; 优先队列重载<运算符 在结构体中定义一个 friend bool operator<(node n1,node n2) return n1.elem>n2.elem; 这是根据node结构体中的elem升序构建的一个操作符 如果想要降序就把>换成< 初始化列表 struct heap { int id; int dist; h

C++学习之重载运算符1

C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们. 先来个代码 1 #include<iostream> 2 using namespace std; 3 4 class num 5 { 6 public: 7 num(){n=1;} 8 ~num(){} 9 int get() const{return n;} 10 void set(int x){n=x;} 11 private: 12 int n; 13 }; 14 15 int main() 16