QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
priorityqueue.h
Go to the documentation of this file.
1/*
2 * libpal - Automated Placement of Labels Library
3 *
4 * Copyright (C) 2008 Maxence Laurent, MIS-TIC, HEIG-VD
5 * University of Applied Sciences, Western Switzerland
6 * http://www.hes-so.ch
7 *
8 * Contact:
9 * maxence.laurent <at> heig-vd <dot> ch
10 * or
11 * eric.taillard <at> heig-vd <dot> ch
12 *
13 * This file is part of libpal.
14 *
15 * libpal is free software: you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation, either version 3 of the License, or
18 * (at your option) any later version.
19 *
20 * libpal is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with libpal. If not, see <http://www.gnu.org/licenses/>.
27 *
28 */
29
30#ifndef PAL_PRIORITYQUEUE_H
31#define PAL_PRIORITYQUEUE_H
32
33
34#include <iostream>
35#include <memory>
36
37#define SIP_NO_FILE
38
39#define LEFT( x ) ( 2 * x + 1 )
40#define RIGHT( x ) ( 2 * x + 2 )
41#define PARENT( x ) ( ( x - 1 ) / 2 )
42
43
44namespace pal
45{
46
54 {
55 public:
62 PriorityQueue( int n, int maxId, bool min );
64
65 PriorityQueue( const PriorityQueue & ) = delete;
67
68 void print();
69
70 int getSize() const;
71 int getSizeByPos() const;
72
73 bool isIn( int key ) const;
74
75 int getBest(); // O(log n)
76
77 void remove( int key );
78 void insert( int key, double p );
79
80 void sort(); // O(n log n)
81
82 void downheap( int id );
83 void upheap( int key );
84
85 void decreaseKey( int key );
86 void setPriority( int key, double new_p );
87
88
89 int getId( int key ) const;
90
91 private:
92 int size = 0;
93 int maxsize;
94 int maxId;
95 std::unique_ptr<int[]> heap;
96 std::unique_ptr<double[]> p;
97 std::unique_ptr<int[]> pos;
98
99 bool ( *greater )( double l, double r );
100 };
101
102} //namespace pal
103
104#endif
PriorityQueue(const PriorityQueue &)=delete
PriorityQueue(int n, int maxId, bool min)
Create a priority queue of max size n \param n max size of the queuet \param p external vector repres...
void decreaseKey(int key)
void setPriority(int key, double new_p)
void insert(int key, double p)
int getId(int key) const
bool isIn(int key) const
PriorityQueue & operator=(const PriorityQueue &)=delete