Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #28594
| Path | csiph.com!weretis.net!feeder4.news.weretis.net!news.roellig-ltd.de!open-news-network.org!feed.xsnews.nl!fbe001.ams.xsnews.nl!peer02.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail |
|---|---|
| From | bartekltg <bartekltg@gmail.com> |
| Newsgroups | pl.comp.programming |
| Subject | Re: Jak poskładać rozsypane drzewko? |
| Date | Tue, 17 May 2016 19:03:07 +0200 |
| Organization | ATMAN - ATM S.A. |
| Lines | 92 |
| Message-ID | <nhfisc$382$1@node2.news.atman.pl> (permalink) |
| References | <nhf91a$pgp$1@node2.news.atman.pl> |
| NNTP-Posting-Host | 89-73-81-145.dynamic.chello.pl |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=utf-8; format=flowed |
| Content-Transfer-Encoding | 8bit |
| X-Trace | node2.news.atman.pl 1463504588 3330 89.73.81.145 (17 May 2016 17:03:08 GMT) |
| X-Complaints-To | usenet@atman.pl |
| NNTP-Posting-Date | Tue, 17 May 2016 17:03:08 +0000 (UTC) |
| User-Agent | Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.6.0 |
| In-Reply-To | <nhf91a$pgp$1@node2.news.atman.pl> |
| X-Received-Bytes | 3364 |
| X-Received-Body-CRC | 1915274995 |
| Xref | csiph.com pl.comp.programming:28594 |
Show key headers only | View raw
On 17.05.2016 16:15, Borneq wrote:
Uwaga językowa.
> CChainNode *elem = vecAllElems[j];
> CChainNode *parent = iter->second;
> CChainNode *parent = iter->second;
Nie używaj tak wskaźników.
Nie dość, że można sobie tym palca odstrzelić,
to jeszcze zmniejsza czytelność i _wydajność_!
W drugim i trzecim przypadku używasz parent tylko raz.
W ogole to nie ejst potrzebne.
> CChainNode *parent = iter->second;
> map[elem->strHashBlock] = elem;
> parent->Add(elem);
->
map[elem->strHashBlock] = elem;
iter->second->Add(elem);
Referencja... Lepiej, ale też nie jest jakimś szczegolnie dobrym
rozwiązaniem do wskazywania na obiekt typu vecAllElems[j].
Ja bym pisał vecAllElems[j]. Kompilator to sobie zoptymalizuje.
W ogolnym przypadku, jeśli jesteś pewien, że _nigdy_ w tym
fragmencie kodu nie zmodyfikujesz kontenera, dla większenia
kompaktowośći tekstu użyj (prosząc w komentarzu o wybaczenie) referencji.
Ale nie w tym przypadku:
> for (int j = 1; j < vecAllElems.size(); j++)
> {
> CChainNode *elem = vecAllElems[j];
Aż się prosi o
for (auto itelem = begin(vecAllElems); itelem!=end(vecAllElems); itelem)
{
Czytelniej, mniej zmiennych dla zmylenia porzeciwnika...
Albo wręcz (tylko nieśredniowieczne kompilatory):
for(auto&& elem: vecAllElems)
{
...
}
tu "elem" jest referencją do kolejnych elementów kontenera.
Problem polega na tym, zę liniowy problem rozwiązujesz kwadratowo!
(find dla każdego elementu).
>
> Jak zrobić? może tworzyć wiele (tysięcy nawet) osobnych niepowiązanych
> drzewek, a potem łączyć je w jedno?
> Problemem jest to, że często najpierw w pliku występuje child a potem
> parent.
Jajpierw wczytaj wszystkie (tak, abyś miał powiązanie klucz->obiekt).
Doraczałbym raczej <klucz, indeks> niż <klucz, wskaźnik>.
Przelatujesz vecAllElems, patrząc na każdym miejscu j na wartość
klucza K. Tworzysz sobie unordered_map klucz -> indeks w vecAllElems,
(od biedy wskaźnik, ale to odstrzli palucha) z elementami j->k
Przelatujesz drugi raz, tym razem patrząc na parent każdego obiekty.
Ale masz słownik, więc wiesz, pod króym indeksem jest parent.
Całość jest linioiowa, dwa przebiegi.
pzdr
bartekltg
Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 16:15 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 17:54 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 19:03 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 19:44 +0200
Re: Jak poskładać rozsypane drzewko? Borneq <borneq@antyspam.hidden.pl> - 2016-05-17 20:06 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 20:14 +0200
Re: Jak poskładać rozsypane drzewko? "M.M." <mmarszik@gmail.com> - 2016-05-17 13:32 -0700
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 22:43 +0200
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-17 22:49 +0200
Re: Jak poskładać rozsypane drzewko? "M.M." <mmarszik@gmail.com> - 2016-05-18 04:59 -0700
Re: Jak poskładać rozsypane drzewko? bartekltg <bartekltg@gmail.com> - 2016-05-18 14:27 +0200
csiph-web