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
- Igår Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 2026 17
- Igår Ny Arc-drivrutin ger kraftigt höjd DX11-prestanda i många spel 17
- 21 / 4 Världens minsta fungerande Nintendo Wii-konsol avtäckt 6
- 21 / 4 Legendarisk processor pensioneras efter 49 år 17
- 20 / 4 Asus lägger till BIOS-inställning för instabila Intel‑processorer 36
Mjukvara
Övrigt
- Igår Europol ställer sig emot end-to-end-kryptering 76
- Igår Svenska speljätten Embracer splittras – blir tre separata bolag 11
- Igår Snabbkoll: Brukar du handla begagnad teknik? 76
- Igår Akira har tjänat en halv miljard kronor på ransomware-attacker 13
- 21 / 4 Gamers Nexus: EK Water Blocks har problem 32
Datorkomponenter
Ljud, bild och kommunikation
- LG:s 32-tums OLED-skärm släpps i april för 18 000 kronor123
- Europol ställer sig emot end-to-end-kryptering77
- Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 202618
- Sur, Ledsen, Galen?! Skriv av er här!21516
- LLama3 eller "Hur kan en språkmodell stapla saker?"19
- Karaoke hjälp2
- [LEK] Gissa spelet15488
- Ger upp Airpods pro dåliga passform, prisvärda hörlurar med transparency mode?6
- Kommer detta nätaggregat funka med en 1070 och i7 7700k3
- Blåskärm och andra krascher5
- Säljes Asus GeForce RTX 2080 ROG Strix Gaming OC 8GB
- Köpes Köpes - i7 4770-4790(K)
- Säljes Steam Deck 1 TB OLED Oöppnad/Nyskick
- Säljes Asus Rog Helious GX601 + 4st Corsair LL120 fläktar
- Köpes X2 Mini Wireless Gamingmus - Rotobox
- Säljes Asus RTX 1060 ROG Strix OC 6GB
- Köpes 28-32" 4K 144-190 hz Gsync & Freesync
- Säljes KFA2 GeForce RTX 4070 Ti EX Gamer (1 Click-OC)
- Säljes Logitech G Pro Flight rudder
- Säljes Samsung Galaxy Watch 6 - oöppnad
- Nanosys: QDEL-tekniken potentiellt redo för kommersiell lansering 202618
- Europol ställer sig emot end-to-end-kryptering77
- Svenska speljätten Embracer splittras – blir tre separata bolag11
- Snabbkoll: Brukar du handla begagnad teknik?76
- Akira har tjänat en halv miljard kronor på ransomware-attacker13
- Valve uppdaterar Team Fortress 2 med 64‑bitarsstöd21
- Ny Arc-drivrutin ger kraftigt höjd DX11-prestanda i många spel17
- Världens minsta fungerande Nintendo Wii-konsol avtäckt6
- Snart krångligare att logga ut i Windows 11109
- Gamers Nexus: EK Water Blocks har problem32