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
Mjukvara
Övrigt
- Idag Efter konkursryktena – Louqe är tillbaka 12
- Idag Kunskapsquiz: IT och det moderna försvaret 40
- Igår Datorhallar åker på miljardstor skattesmäll – ljög om att utvinna krypto 53
- Igår Veckans fråga: Möss eller ljud – Vad lägger du mest pengar på? 73
- 16 / 4 X kan råda bot på bottar med betallösning 33
Datorkomponenter
Ljud, bild och kommunikation
- 3dfx grafikkort återuppstår i hobbyprojekt16
- Köpråd 32"6
- Vad vill ni se i nästa Battlefield?64
- Kunskapsquiz: IT och det moderna försvaret40
- *edit* mITX/mATX bygge - 1440p Warzone / wow Budget: ~20.000kr ?52
- Dagens fynd — Diskussionstråden49385
- Tips på router med nätverksövervakning?1
- Dagens fynd (bara tips, ingen diskussion) — Läs första inlägget först!18382
- Tips på top-down spel.5
- Snart ber Microsoft dig överge ditt lokala konto89
- Säljes 12700k | 980 PRO 1tb | Contact Frame TG
- Köpes Söker Dongle till Steelseries Arctis 7X PLUS
- Säljes Diverse PS5-spel, Ritplatta och Motorola Moto G 5g plus!
- Säljes RTX 3050 8 GB ROG STRIX GAMING OC
- Säljes Sennheiser HD560S och RÖDE NT-USB
- Säljes Mp600 Pro 2TB, hel dator gtx 1080,6700k, ryzen 3600 samt gtx 1070
- Säljes AOC AGON PRO PD32M - 32" 4K IPS MiniLED 144 Hz
- Säljes ASUS Z170-A inklusive CPU i7-6700 och kylare "be quiet! Pure Rock"
- Säljes Inno3D 4070 Super
- Säljes Herman Miller Embody + Atlas headrest
- Edge kan få klassisk sci-fi-funktion4
- Efter konkursryktena – Louqe är tillbaka12
- Snart ber Microsoft dig överge ditt lokala konto89
- Kunskapsquiz: IT och det moderna försvaret40
- Här är priserna på LG:s nya OLED-arsenal46
- 3dfx grafikkort återuppstår i hobbyprojekt16
- Logitech släpper ”AI-knapp” – snabbgenväg till Chat GPT11
- Här är systemkraven för Ghost of Tsushima till PC30
- Välj rätt TV för ljusa rummet13
- Bli ett RGB-Pro med Razers nya musmatta för 1 100 kronor18
Externa nyheter
Spelnyheter från FZ
- Kingdom Come: Deliverance II idag
- Todd Howard: "Väldigt bra" Starfield-uppdateringar väntar runt hörnet idag
- No Rest for the Wicked släpps strax i early access idag
- Diskutera – De värsta logiska vurporna du (tyvärr) sprungit på i spel idag
- World of Warcraft på konsol? Blizzard: "Ingenting är omöjligt" idag