abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:22 | Pozvánky

    Oslavte vydání openSUSE Leap 16.1 s námi v Praze! Ve středu 4. listopadu 2026 (den po vydání Leapu 16.1) vás zveme na malou oslavu vydání openSUSE Leap 16.1 do pražské kanceláře SUSE. Připravili jsme pro vás dvě krátké přednášky: … více »

    lkocman | Komentářů: 0
    včera 16:44 | Bezpečnostní upozornění

    Dle plánu bylo PHP vydáno v nových verzích 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Opraveny jsou kritické zranitelnosti CVE-2026-109618 a CVE-2026-109619 aneb PHP2Shell.

    Ladislav Hagara | Komentářů: 4
    včera 11:55 | Nová verze

    UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-2.1 a 24.04-1.5. S opravou kritických zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 11:33 | IT novinky

    Společnost Škoda Auto zveřejnila na Printables bezplatné 3D modely příslušenství do svých vozů (držáky na nápoje, pomůcky pro vedení kabelů, mincovníky, háčky na USB kabely a čepice pro kapsy na zadních stranách opěradel sedadel, držáky na telefony a úchyty pro horní upevnění bezpečnostních pásů).

    Ladislav Hagara | Komentářů: 7
    včera 05:11 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 170 (pdf).

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Bezpečnostní upozornění

    Dnes v 16:00 (14:00 UTC) budou opraveny 2 kritické zranitelnosti s CVSS 9.2 v PHP.

    Ladislav Hagara | Komentářů: 7
    včera 01:37 | Bezpečnostní upozornění

    Nizozemská policie 13. října 2026 zabavila v datacentru Amsterdam Science Park server italského poskytovatele internetových služeb Autistici/Inventati (A/I), a to na základě americké žádosti o mezinárodní právní pomoc.… více »

    vencour | Komentářů: 10
    20.10. 20:47 | Bezpečnostní upozornění
    Hlášeny RCE v NGINX. Náprava dostupná. … více »
    vencour | Komentářů: 0
    20.10. 20:33 | IT novinky

    Do 26. října do 18:00 běží na Steamu přehlídka nadcházejících her Festival Steam Next | říjen 2026 (YouTube) doplněná demoverzemi, přenosy a dalšími aktivitami. Demoverze lze hrát zdarma.

    Ladislav Hagara | Komentářů: 0
    20.10. 20:22 | Zajímavý software

    Čínská technologická společnost DeepSeek zveřejnila na GitHubu svůj framework DeepInfer, nástroj pro efektivní offline inferenci svého modelu DeepSeek-V4.1-Flash ve velkém měřítku. Software běží na Linuxu a nativně podporuje akcelerátory Nvidia ale i čipy Huawei Ascend 950. Jedná se pouze o samotný inferenční engine, ne kompletní produkční službu. Zdrojový kód je dostupný pod licencí Apache 2.0.

    ❗Červivý Hřib krade❗ | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (30%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2888 hlasů
     Komentářů: 33, poslední 20.10. 23:44
    Rozcestník
    Štítky: není přiřazen žádný štítek

    JXP Commander a std::sort

    17.7.2006 13:54 | Přečteno: 1462× | Linux

    Jelikož padla spousta návrhů na použití std::sort k řazení, učinil jsem tak. Bohužel však nepociťuji ŽÁDNÉ zrychlení. Připadá mi to úplně stejně rychlé.

    void FileInfoList::sort( int column, bool ascending )
    {
    	FileInfoComparator fic( column, ascending );
    	std::sort( begin(), end(), fic );
    }
    
    bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )
    {
    	if( fi1->isDots() ) return true;
    	if( fi2->isDots() ) return false;
    	if( fi1->isDir() && !fi2->isDir() ) return true;
    	if( fi2->isDir() && !fi1->isDir() ) return false;
    	int cmpRes = 0;
    	off64_t size1,size2;
    	time_t date1, date2;
    	switch( sortColumn )
    	{
    		case FileInfoList::COLUMN_NAME:
    			cmpRes = g_utf8_collate( fi1->getNameTitle().c_str(), fi2->getNameTitle().c_str() );
    			break;
    		case FileInfoList::COLUMN_EXT:
    			cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
    			break;
    		case FileInfoList::COLUMN_SIZE:
    			fi1->getSize(size1); fi2->getSize(size2);
    			if(size1>size2) cmpRes = 1;
    			else if( size2>size1 ) cmpRes = -1;
    			break;
    		case FileInfoList::COLUMN_DATE:
    			fi1->getDate(date1); fi2->getDate(date2);
    			if(date1>date2) cmpRes = -1;
    			else if(date2>date1) cmpRes = 1;
    			break;
    		case FileInfoList::COLUMN_ATTRS:
    			cmpRes = g_utf8_collate( fi1->getAttrs().c_str(), fi2->getAttrs().c_str() );
    			break;
    		case FileInfoList::COLUMN_OWNER:
    			cmpRes = g_utf8_collate( fi1->getOwner().c_str(), fi2->getOwner().c_str() );
    			break;
    		default:
    			cmpRes = g_utf8_collate( fi1->getGroup().c_str(), fi2->getGroup().c_str() );
    			break;
    	}
    	if(cmpRes == 0) cmpRes = g_utf8_collate( fi1->getName().c_str(), fi2->getName().c_str() );
    	if(ascending) cmpRes = -cmpRes;
    	return (cmpRes > 0);
    }
    
           

    Hodnocení: 79 %

            špatné • dobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    17.7.2006 14:25 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Myslím, že mnohem podstatnější je, _jak_ je to vlaatně rychlé. Nepodělíš se s námi o tuto informaci? ;-)
    Jardík avatar 17.7.2006 14:36 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Řekněme, že to není ani moc pomalé, ani moc rychlé. Zajímavé na tom je, že takto to řeší ATOL FM, ale jemu se to seřadí okamžitě. Sice používá k porovnání řetězců strcmp a já g_utf8_collate, ale tím to není. I když použiji strcmp, je na tom atol lépe. Možná to ani tak nezdržuje to řazení jako spíše smazání obsahu modelu a jeho opětovné naplnění. Ten model samozřejmě před těmito operacemi z treeviewu odpojuji.
    Věřím v jednoho Boha.
    17.7.2006 14:50 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Chceš tím naznačit, že to tady už třetí blogpost ladíš na výkon a ještě jsi to ani jednou nevyprofiloval? :-D
    17.7.2006 16:48 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Jakto? Přece proběhl přepis z gtkmm (moc pomalé) do gtk :-D
    When your hammer is C++, everything begins to look like a thumb.
    17.7.2006 17:06 Kyosuke | skóre: 28 | blog: nalady_v_modre
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Reaguju konkrétně na větu „Možná to ani tak nezdržuje to řazení“... ;-) Někdy nestačí myslet a je třeba vědět. :-D Kdepak, bez profileru při ladění výkonu nehnu prstem. :-)
    17.7.2006 19:11 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Já ti rozumím, jenom jsem poukázal na jednu "optimalizaci", která už proběhla :-). Taky nerad přepisuju kód. o němž 100% nevím, že je to ten kousek, co mě zpomaluje.
    When your hammer is C++, everything begins to look like a thumb.
    17.7.2006 18:25 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Mám to chápat tak, že při požadavku na přeřazení znovu načítáte celý obsah adresáře a na každý soubor voláte stat() nebo lstat()? Pak by mne nepřekvapilo, pokud by problém byl skutečně tady a ne v samotném řazení seznamu.
    Jardík avatar 17.7.2006 22:18 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Ale blbost. Nevolám. Pouze při vstupu do adresáře - což se děje i při spuštění programu. Myslel jsem to tak, že musí ještě navíc plnit pár sloupců v treeviewu - a to také zdržuje.
    Věřím v jednoho Boha.
    17.7.2006 22:23 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Tak to nemůžu sloužit, tak dalece Gtk neznám. Takže mi nezbývá než se připojit k doporučení, abyste na to vypustil profiler, protože jinak můžeme jen prázdně spekulovat.
    elviin avatar 17.7.2006 14:36 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Zkousel jsi to s std::set/vector? Do toho kontejneru ukladas cely objekty nebo (chytry) ukazatele? Vypada to, ze cely objekty. Mozna v tom bude urcity zrychleni, protoze jestli to mas ulozeny ve vektoru, pak se musi serazena posloupnost kopirovat, resp se kopiruji i objekty. Nebylo by lepsi radit podle ukazatelu?:
    typedef shared_ptr<PFileInfo> PFileInfoPtr_t;
    typedef std::vector<PFileInfoPtr_t> fileContainer;
    
    elviin avatar 17.7.2006 14:37 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    nemyslel jsem set ale list.
    Jardík avatar 17.7.2006 14:41 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    class FileInfoList: public std::vector<FileInfo*>{
    ...
    }
    
    Drží tedy ukazatele. PFileInfo je jen typedef na FileInfo*, abych se vyhnul něčemu jako const FileInfo*& v tom operátoru ().
    Věřím v jednoho Boha.
    elviin avatar 17.7.2006 14:42 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Aha! diky.
    elviin avatar 17.7.2006 14:49 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Jeste neco k tomu napisu. Data jsou proste nekde ulozena. Na ty data ukazujes. A ty ukazatele (v jakekoliv forme) jsou ulozene ve vektorech (treba nebo setech nebo ja nevim co) a kazdy vektor je vytvorenej na zaklade odlisneho zpusobu razeni (objektu kopmaratoru). Jak to dole pise happy barney.

    Ale jakej by byl zisk nevim. Mne ten switch prijde takovej jednoduchej, ale zase nadruhou stranu si muzes drzet serazene std:sety (mozna std::vector) a vzdy jen pouzijes ten, ktery proste chces a potrebujes.
    17.7.2006 14:38 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    problem nebude v algoritme, ale v komparatore :-)

    preco neskusit (ako som navrhoval)
    - extra komparatory (triedy) pre kazdy typ stlpca
    - vyhodit . a .. z filelistu

    navyse, nie je doriesena otazka, ako sortovat v pripade rovnosti kriteria (datumy, velkosti, ...)

    Jardík avatar 17.7.2006 14:45 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    To mně na tom nejvíce štve. V případě std::sort nemám možnost říci, že jsou položky "stejné". Musím to řešit tak, že pokud jsou, musím je setřídit dle jména. Před tím jsem je prostě nechal tam, kde byly. V komparátoru chyba nebude - v atolu je to úplně stejně a je to setřízeno okamžitě.
    Věřím v jednoho Boha.
    17.7.2006 15:00 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Tu možnost samozřejmě máte: položky jsou ekvivalentní, pokud není a<b ani b<a. Proto se to jmenuje strict weak ordering.
    17.7.2006 15:19 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    to by muselo ale byt
    return cmpRes == 0;
    
    vlastne i to moze byt dovod tej "pomalosti"
    17.7.2006 15:20 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    oprava, samozrejme !=
    17.7.2006 16:11 Kníže Ignor | skóre: 19 | blog: stoupa
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tak to snad ne, ten komparátor odpovídá na otázku, jestli je ta dvojice prvků v té relaci, takže se v tom returnu nic měnit nemusí
    Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
    17.7.2006 16:20 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    hopla :-)
    no nic, uz si konecne musim dat abclinuxu.cz medzi blokovane stranky v case 6:00 - 18:00 :-))
    17.7.2006 15:12 Kníže Ignor | skóre: 19 | blog: stoupa
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tož, když už je ten komandér tak zaměřenej na to třídění, nemohl by si pro každej adresář pamatovat zvlášť, jak se v něm má třídit, pamatovat by si moh i další věci - třeba způsob zobrazení, jaké sóbory mají být skryté atd.
    Jestli máš zálohu mého blogu, tak mi ji pošli. Nějak jsem si ho smazal :-)
    17.7.2006 16:18 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    tak jsem si to cvicne vyzkousel v Qt a nacteni a setrideni /etc mi vychazi na cca 49ms. Vcetne vypisu do statusbaru a na konzoli. Se mi nezda, ze by to melo byt v Gtk pomalejsi...
    Kuolema Kaikille (Paitsi Meille).
    17.7.2006 16:52 Feyd | skóre: 1
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    gtk je pomalej rosolovite se prekreslujici sh*t
    17.7.2006 16:57 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    hehe, vdaka za podstatnu informaciu :)

    btw skusil som si prekreslovanie menu v opere (Qt) a sylpheed-claws (Gtk+) a opera nestihala vypisovat viac nez prvu polozku :)
    17.7.2006 16:59 Filip Jirsák | skóre: 67 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    To je opravdu komentářová perla. Ta přesná fakta, vybroušené formulace… Jestli to byla jen záminka, aby se zobrazilo vedle vašeho jména tlačítko blokovat a mohli jsme ho snadno použít, stačilo nechat komentář prázdný…
    Jardík avatar 17.7.2006 18:07 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Proboha. /etc? Tam je skoro prd. Já tam mám 143 položek. V tom commanderu jich mám v seznamu 2000 :) Zkus třeba /usr/bin - 1523. A nezkoušej jen výpis souborů. Zkus si přidat velikost, práva, vlastníka, skupinu - ono tě to pak docela pozdrží.
    Věřím v jednoho Boha.
    17.7.2006 20:18 s0 | skóre: 32 | blog: nejchytřejší kecy | prágl
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    /usr/bin 1946. Vypisuju tam jmeno souboru, f|d, cas posledni modifikace. Vic se mi nechce delat ;)
    20:08:39:458    start
    20:08:40:419    end
    
    samozrejme, ziskani celeho vypisu rwxrw-rw- by to urcite zpomalilo, ale trideni mi QListView dela uplne sam - krome trideni podle data modifikace. Tam se musi napsat jedna porovnavaci funkce.
    Kuolema Kaikille (Paitsi Meille).
    17.7.2006 20:53 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: JXP Commander a std::sort
    Drobna pripominka k deklaraci te metody:
    bool FileInfoComparator::operator()( const PFileInfo& fi1, const PFileInfo& fi2 )
    Pokud definice PFileInfo vypada nejak takto
    typedef FileInfo* PFileInfo;
    tak to dohromady nedela to, co nejspis prepodkladate. Vyleze z toho totiz reference na konstatni ukazatel na objekt FileInfo. Neboli primo fi1 menit nelze, ale objekt, na ktery ukazuje, ano (*fi1 = *fi2 projde). A take je zcela zbytecne cpat na ukazatele jeste reference. IMHO spravna deklarace by mela vypadat takto
    bool FileInfoComparator::operator()(const FileInfo* fi1, const FileInfo* fi2 )

    Založit nové vlákno • Nahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.