priority_queue里面自定义类型的使用。

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 struct tree{
 5     int num;
 6     string s;
 7     tree(int x,string zfc)
 8     {
 9         num=x;
10         s=zfc;
11     }
12     friend bool operator>(const tree &a,const tree &b)
13     {
14         return a.num>b.num;
15     }
16     /* 显然用不用友元来重载是不一样滴*/
17     /*bool operator<(const tree &a)const
18     {
19         return a.num>num;
20     }*/
21     bool operator==(const tree &a)const
22     {
23         return a.num>num;
24     }
25 };
26 /* 两个重载的<,随便一个都可以,显然里面和外面重载参数个数是不同滴*/
27 bool operator<(tree a,tree b)
28 {
29     return a.s<b.s;
30 }
31 int main()
32 {
33     priority_queue<tree> q;
34     /* 因为要用到优先队列,所以必须重载<*/
35     tree t(5,"hh");
36     q.push(t);
37     tree r(4,"xx");
38     q.push(r);
39     while(!q.empty())
40     {
41         cout<<q.top().num<<" "<<q.top().s<<endl;
42         q.pop();
43     }
44     if(r==t)
45     cout<<"hh";
46     else
47     cout<<"xx";
48 }

这是优先队列里面装一个普通的自定义类型。

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 typedef struct tree* T;
 5 struct tree{
 6     int num;
 7     string s;
 8     T next;
 9     tree(){
10     }
11     tree(int x,string zfc)
12     {
13         num=x;
14         s=zfc;
15     }
16     friend bool operator<(const tree a,const tree b)
17     {
18         return b.num>a.num;
19     }
20 };
21 struct cmp{
22     bool operator()(T a,T b)
23     {
24         return a->num>b->num;
25     }
26 }; /* 使用结构体重载排序函数,priority_queue中就必须写好3个参数*/
27 int main()
28 {
29 //    priority_queue<T,vector<T>,cmp> q;
30     priority_queue<T> q;/* 不知道为啥,这里创造优先队列,没有重载排序函数,它也没有报错了*/
31     T t=new tree();/* 指针类型必须分配空间*/
32     t->num=5;
33     t->s="hhh";
34     q.push(t);
35     T r=new tree();
36     r->num=4;
37     r->s="xxx";
38     q.push(r);
39     T h=new tree(3,"nn");
40     q.push(h);
41     while(!q.empty())
42     {
43         cout<<q.top()->num<<" "<<q.top()->s<<endl;
44         q.pop();
45     }
46 } 

要是用3个参数的priority_queue,就要用结构体重载排序函数了。然后再使用过程中,遇到了一些问题,也不知道为什么。

原文地址:https://www.cnblogs.com/dayq/p/11939324.html

时间: 2024-08-05 08:47:13

priority_queue里面自定义类型的使用。的相关文章

springmvc 类型转换器 自定义类型转换器

自定义类型转换器的步骤: 1.定义类型转换器 2.类型转换器的注册(在springmvc配置文件处理) 来解决多种日期格式的问题:

内存对齐与自定义类型

一.内存对齐 (一).为什么会有内存对齐? 1.为了提高程序的性能,数据结构(尤其是栈)应该尽可能的在自然边界上对齐.原因是为了访问未对齐的内存,处理器需要进行两次访问,而访问对齐的内存,只需要一次就够了.这种方式称作"以空间换时间"在很多对时间复杂度有要求问题中,会采用这种方法. 2.内存对齐能够增加程序的可移植性,因为不是所有的平台都能随意的访问内存,有些平台只能在特定的地址处处读取内存. 一般情况下内存对齐是编译器的事情,我们不需要考虑,但有些问题还是需要考虑的,毕竟c/c++是

Core Data存储自定义类型数据

目录: 一.使用CoreData存储基本数据 二.使用CoreData存储自定义类型数据 简单介绍CoreData CoreData是iOS编程中使用持久化数据存储的一种方式,我们知道CoreData并不是数据库本身,而是Apple提供的对象持久化技术--Object Persistent technology.CoreData框架为我们的数据变更.管理.对象存储.读取和恢复提供了支持.下面我们来尝试创建一个简单的CoreData Project. 操作 1. 打开x-code,为你的proje

Hadoop日记Day13---使用hadoop自定义类型处理手机上网日志

测试数据的下载地址为:http://pan.baidu.com/s/1gdgSn6r 一.文件分析 首先可以用文本编辑器打开一个HTTP_20130313143750.dat的二进制文件,这个文件的内容是我们的手机日志,文件的内容已经经过了优化,格式比较规整,便于学习研究,感兴趣的读者可以尝试一下. 我从中截取文件中的一行记录内容进行分析: 1363157985066     13726230503    00-FD-07-A4-72-B8:CMCC    120.196.100.82    i

Hadoop自定义类型处理手机上网日志

job提交源码分析 在eclipse中的写的代码如何提交作业到JobTracker中的哪?(1)在eclipse中调用的job.waitForCompletion(true)实际上执行如下方法 connect(); info = jobClient.submitJobInternal(conf); (2)在connect()方法中,实际上创建了一个JobClient对象. 在调用该对象的构造方法时,获得了JobTracker的客户端代理对象JobSubmissionProtocol. JobSu

struts2基础----&gt;自定义类型转换器

这一章,我们开始struts2中自定义类型转换器的学习. 自定义类型转换器 一.定义一个继承于StrutsTypeConverter的转换类: package com.huhx.converter; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import o

【Spring】利用spring的JdbcTemplate查询返回结果映射到自定义类型

// org.springframework.jdbc.core.JdbcTemplate 中的查询方法基本都有支持参数RowMapper<T> rowMapper的重载方法.下面只是随便举例2个,还有很多 public <T> List<T> query(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException { ... }; public <T>

sruts2 自定义类型转换器

1.1.1    Struts2中自定义类型转换器:(了解) 类型转换的过程是双向的过程: JSP---->Action参数提交:String---Date. Action---->JSP数据回显:Date---String. 自定义类型转换器: * 1.实现TypeConverter * convertValue(java.util.Map<java.lang.String,java.lang.Object> context, java.lang.Object target, j

C# 自定义类型数组的排序

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 数组排序 8 { 9 /// <summary> 10 /// IComparable : 接口 11 /// </summary> 12 public class Student : IComparabl