Výběr kontejneru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výběr kontejneru – C / C++ – Fórum – Programujte.comVýběr kontejneru – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
7. 11. 2010   #1
-
0
-

Navrhuji jednu aplikaci a není mi jasné, jaký kontejner z STL by byl pro daný úkon nejvhodnější;
V kontejneru by měly být uchovávány celočíselné indexy, ke kterým bude přiřazen ukazatel. S položkami v kontejneru potřebuji provádět tyto operace:
[seznam]Zcela nahodile k nim přistupovat[/seznam]
[seznam]Mazat je kdekoliv v kontejneru[/seznam]
[seznam]Přidávat nové; nezáleží jaký index jim bude přiřazen (tzn. pozřebuji nějak zjistit neobsazený index)[/seznam]
Mýmy favority jsou vector a mapa. U mapy nevím, jak rychlé je u ní mazání. Navíc nevím, jak bych získával nové indexy. U vectoru jsem zamýšlel položky v něm smazané nechávat; pouze přidávat na konec nové (volný index bych získal pomocí funkce size()). Bylo by to paměově náročnější; navíc by někdy bylo nutné vector stejně někde promazat, abych se vlezl do limitu (long) unsigned int.

Doufám, že chápete, co myslím. Jaký kontejner by jste zvolili vy? Děkuju za odpověď.

Nahlásit jako SPAM
IP: 85.160.93.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Jura
~ Anonymní uživatel
637 příspěvků
7. 11. 2010   #2
-
0
-

Čau,

osobně bych si udělal nějaký adapter(= vlastni definované rozhraní, ať případné změny neovlivní celý projekt) nad těmi kontejnery a v první implementaci prostě zkusil vector. A teprve až bych zjistil případné výkonostní problémy, tak bych se zamýšlel nad jiným kontejnerem(uvažoval jsi o hashovací tabulce?).

Nahlásit jako SPAM
IP: 78.80.45.–
yaqwsx+9
Posthunter
10. 11. 2010   #3
-
0
-

Původně jsem se zkoušení chtěl vyhnout; mít teoreticky základ. Teď s odstupem 3 dnů jsem dospěl k názoru, že metoda pokus-omyl bude nejlepší. Díky za odpověď

Nahlásit jako SPAM
IP: 85.160.115.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
voty+1
Návštěvník
11. 11. 2010   #4
-
0
-

To yaqwsx : Záleží na tom co chceš, kolik prvků v kontejneru bude, jaká bude nejčastější operace atp.
Já osobně jsem tohle řešil pomocí mapy, kde klíč byl uint64_t, který jsem pokaždé zvyšoval při vkládání nového elementu, s tím, že dle mého rozboru (při maximální možné frekvenci vkládání a vybírání objektů) mi množina klíčů (2^64) dojde opravdu za dlouhý čas, který zaručeně přesahuje délku životnosti předpokládaného HW.

Nahlásit jako SPAM
IP: 81.19.47.–
Jednu rozbil a tu druhou ztratil.
yaqwsx+9
Posthunter
11. 11. 2010   #5
-
0
-

To voty : Počet prvků v kontejneru? Okolo 30-40tisíc. A frekvence vyjímaní bude různá; zhruba tak 50% prvků v kontejneru nezůstane déle než 0,5 sekundy a cca 5% se tam neohřeje ani na desetinu sekundy.

Nahlásit jako SPAM
IP: 85.160.96.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
voty+1
Návštěvník
12. 11. 2010   #6
-
0
-

To yaqwsx : Tak je pěkné :) Ale pokud má v kontejneru být skutečně naráz 30 až 40 tisíc objektů, z nichž se každých 500 ms 50% protočí, tak se mi jako nejlepší jeví STL list, kde "indexem" bude iterator (doufám, že se nepletu a iterator u STL list zůstává platný i po operacích vkládání a vyjímání jiných prvků, když tak mne opravte).

Nahlásit jako SPAM
IP: 81.19.47.–
Jednu rozbil a tu druhou ztratil.
KIIV
~ Moderátor
+43
God of flame
12. 11. 2010   #7
-
0
-

To voty : jak zmenis list tak prestavaj iteratory platit.. pokud si pamatuju dobre

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
yaqwsx+9
Posthunter
12. 11. 2010   #8
-
0
-

To voty : To KIIV : Pokud si pamatuji dobře, tak se zneplatní pouze iterátory za vyjmutým/vloženým prvkem. Ale i tak je to pro mě nepoužitelné.
Děkuji za úvahy a návrhy – rozhodl jsem se že půjdu cestou metody a omylu; jako první kandidáty mám mapy a vector.

Nahlásit jako SPAM
IP: 85.160.64.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
voty+1
Návštěvník
13. 11. 2010   #9
-
0
-

To KIIV : Tak jsem to pro jistotu hledal a u Listu jsou iterátory stále platné, ať přidáváme jak přidáváme a mazání jedné položky listu zneplatní právě ten jeden iterátor, který položce odpovídá.

Nahlásit jako SPAM
IP: 78.80.10.–
Jednu rozbil a tu druhou ztratil.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 25 hostů

Podobná vlákna

Plovoucí výběr — založil Bernard Williams

Výběr mikroprocesoru — založil dominik tinka

Výběr měny — založil Ervin Coep

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý