Crosshair IV | 1055T @ 3.2 GHz | 4 GB Corsair dominator | Corsair H50 | Fractal Design R3 | 2x PowerColor 6950 2GB | Corsair HX 750W
C++ Priority_queue med pekare
Visa signatur
Av minst två anledningar bör du lagra noder "by value" i stället för att spara pekare:
roten till felet du nu fått är inte uppenbart för dig, risken är överhängande att du t.ex. orsakar minnesläckor eller andra fel
din HuffmanNode har ett väldigt litet tillstånd, en av sakerna som gör C++ väldigt effektivt är hur det kan hantera "by value" typer + det är mycket enklare att resonera kring C++ program som har sina element "by value"
Det är möjligt att använda pekare, men då prioritetsköer måste kunna jämföra element för att sortera dem så måste du i det läget skapa en "proxy" typ som i stort sett bara finns där för att ge pekare-till-T egenskap av en typ som går att jämföra. Jämförelsen ska vara baserad på tillståndet av T, inte dess pekarvärde.
Har inte testat detta, men något åt det här hållet skulle vara möjligt
#include <vector>
#include <queue>
#include <map>
#include <memory>
using namespace std;
class HuffmanNode
{
int character;
int count; // frequency of 'character'
public:
friend class HuffmanNodePtr;
HuffmanNode (int chr, int cnt) : character(chr), count(cnt) { }
};
// Proxy class to make it possible to compare pointer-to-HuffmanNode based on state
class HuffmanNodePtr
{
unique_ptr<HuffmanNode> ptr;
public:
HuffmanNodePtr (HuffmanNode * p) : ptr(p) { }
bool operator<(const HuffmanNodePtr & rhs) const
{
return ptr->count < rhs.ptr->count;
}
operator HuffmanNode * () const
{
return ptr.get();
}
};
HuffmanNode *
buildEncodingTree(const map<int, int> &freqTable)
{
priority_queue<HuffmanNodePtr> prio_que;
for (auto &element: freqTable)
{
// The "new Huf..." should really be replaced with
// make_unque<HuffmanNode>(...), but requires C++14
prio_que.push (new HuffmanNode(element.first, element.second));
}
//treeBuilder(prio_que);
return prio_que.top();
}
Visa signatur
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Citera flera
Citera
(2)
Hårdvara
- Idag Nu stiger hårddiskpriserna med uppemot 10 procent 9
- Idag Analytiker: Apple har överskattat intresset för Vision Pro 47
- Igår AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 25
- Igår Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz 13
- 23 / 4 Meta öppnar upp Quests OS – vill bli VR-världens Android 12
Mjukvara
Datorkomponenter
Ljud, bild och kommunikation
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk2
- Nintendo-innehåll tas bort från Garrys Mod11
- Quiz: Vad kan du om Inet?55
- Amazons Fallout-serie regisseras av Jonathan Nolan (Inte den Nolan, men hans brorsa)331
- Battlefield 20423725
- Vart får man tag på halvantika processorer nuförtiden?19
- Köpa mesh1
- LegoClockers - Samlingstråd för allt med Lego611
- Rabbel.se - Ett dagligt ordspel710
- Grafikkort till ryzen 5600G / pcie 3.0. RX 6600?4
- Säljes Gigabyte Aorus GTX 1060 6GB
- Säljes Diverse - MX Keys Tangentbord, ZenDAC V2, Fidelio Hörlurar, Handkontroll
- Säljes Logitech G915 Lightspeed trådlöst tangentbord GL Tactile & Logitech G Pro Wireless
- Bytes Testkörd Tp-Link Omada 605ER
- Säljes Higround BLACKICE Keycaps 65% Nordic
- Köpes Qnap TL-D800S / TL-D1600S / TL-D800C
- Säljes 2 set med Corsair 16GB (2x8GB) DDR4 3600MHz CL18 Vengeance LPX AMD
- Köpes 5800x3d / 5700x3d
- Säljes iMac Pro 2017
- Köpes Köpes AM4 moderkort + Minnen.
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk2
- Nintendo-innehåll tas bort från Garrys Mod11
- Nu stiger hårddiskpriserna med uppemot 10 procent9
- Quiz: Vad kan du om Inet?55
- Analytiker: Apple har överskattat intresset för Vision Pro47
- Microsoft rullar ut Startmenyreklam till alla54
- EU röstar igenom ”rätten att reparera”51
- Viaplay sätter ner foten mot delade konton55
- AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna?25
- Systembolaget varnar: Dryckesbrist efter hackerattack100