c++ |
您所在的位置:网站首页 › 惠普p1108打印机怎么样 › c++ |
C ++中的优先队列是STL中的派生容器,它仅考虑最高优先级元素。队列遵循FIFO策略,而优先队列根据优先级弹出元素,即,优先级最高的元素首先弹出。 与普通队列区别: 在优先队列中,队列中的每个元素都与某个优先级相关联,但是优先级在队列数据结构中不存在。 优先队列中具有最高优先级的元素将被首先删除,而队列遵循FIFO(先进先出)策略,这意味着先插入的元素将被首先删除。 如果存在多个具有相同优先级的元素,则将考虑该元素在队列中的顺序。 语法: priority_queue variable_name;其模板声明带有三个参数,priority_queue, 其中Type为数据类型,Container为保存数据的容器,Functional为元素比较方式。Container必须是用数组实现的容器,比如 vector, deque. STL里面默认用的是vector. 比较方式默认用operator< , 所以如果把后面两个参数省略的话,优先队列就是大顶堆,队头元素最大。 priority_queue(),默认按照从小到大排列。所以top()返回的是最大值而不是最小值! 使用greater后,数据从大到小排列,top()返回的就是最小值而不是最大值! 如果使用了第三个参数,那第二个参数不能省,用作保存数据的容器!!!! priority_queue pq;//这是错误的 priority_queue pq;//这是对的 //升序队列 priority_queue q; //降序队列 priority_queue q; //greater和less是std实现的两个仿函数(就是使⼀个类的使⽤看上去像⼀个函数。其实现就是类中实现⼀个operator(),这个类就有了类似函数的⾏为,就是⼀个仿函数类了)greater与greater() 的区别,这要根据函数原型要求参数是函数对象类型还是要求参数是结构类型。greater 对应于结构的类型,greater< int>()对应于没有参数且返回类型更大的函数的类型。比如multimap中使用不带括号的,sort使用带括号的。 注意:pair的⽐较,先⽐较第⼀个元素,第⼀个相等⽐较第⼆个 #include #include #include using namespace std; int main() { priority_queue a; pair b(1, 2); pair c(1, 3); pair d(2, 5); a.push(d); a.push(c); a.push(b); while (!a.empty()) { cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |