hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 10:56:46 @j23 dzięki, działa.
Generalnie jest kilkukrotnie szybciej bo jakieś 1000 rekordów na sekundę, ale to wciąż długo. Spróbuję się jeszcze pobawić z tymi mapami. Dzięki Wam za pomoc, w razie czego będę pisał. |
|
j23 |
» 2016-01-31 12:35:15 Nie sądzę, żeby mapa była jakoś znacznie szybsza przy wyszukiwaniu niż vector + lower_bound. Problem zapewne leży w innym miejscu... |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 18:32:00 @j23 w tej chwili mam to tak zrobione, że dla głównego wektora jest pętla for, bo i tak muszę każdy rekord przetworzyć no i wewnątrz szukam tą funkcją binarną i łączę to w wektor Zestaw, który zawiera wszystkie docelowe pola. Tyle, że ten wektor przekazuję pusty przez referencję i uzupełniam. Czy utworzenie go wew. funkcji i zwrócenie gotowego może coś przyspieszyć? |
|
pekfos |
» 2016-01-31 18:57:15 Tyle, że ten wektor przekazuję pusty przez referencję i uzupełniam. Czy utworzenie go wew. funkcji i zwrócenie gotowego może coś przyspieszyć? |
Jeśli widzisz w tym jakieś korzyści, to to samo możesz zrobić przez referencję. Zwracanie nic nie zmieni, może najwyżej spowolnić, w zależności od kompilatora. Zamiast samemu kombinować, lepiej podaj kod. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 19:17:19 W mainie mam wywołanie: utworzZestawW( slownik, klasa, zestaw ); i dalej void utworzZestawW( vector < Slownik > slownik, vector < Klasa > klasa, vector < ZestawW >& tab ) { int a = 0; ZestawW * temp = new ZestawW; Slownik s; cout << "Trwa tworzenie zestawienia." << endl; vector < Slownik >::iterator itSlow; for( size_t i = 0; i < klasa.size(); i++ ) { if( a > 0 ) { temp->imie = klasa[ i ].imie; temp->nazwisko = klasa[ i ].nazwisko; temp->opis = klasa[ i ].opis; s.nazwisko = klasa[ i ].nazwisko; itSlow = lower_bound( slownik.begin(), slownik.end(), s, sortSlownik ); tab.push_back( * temp ); if( a % 5000 == 0 ) cout << a << endl; } a++; } cout << "Zestawienie utworzone." << endl; }
Z iteratora nic na razie nie dodawałem bo tylko sprawdzałem czas jaki to teraz zajmie. Co do zmiennej 'a', to pomijam pierwszy rekord bo zawiera on tekstową nazwę danej kolumny. Wszystkie pola to stringi (masa też, mam nadzieję, że to nie powód). Docelowo mają być tutaj jeszcze szukane dane z innego wektora więc to tylko jeszcze spowolni. Przypomnę, że główna pętla wykonuje się około 180 tys. razy. |
|
pekfos |
» 2016-01-31 19:22:13 Po co ci zmienna a, skoro i ma taką samą wartość? Po co w ogóle te sprawdzenie, skoro możesz zacząć pętlę od i równego 1? Do tego dalej niepotrzebnie alokujesz zmienną temp. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 19:23:07 No właśnie byłem w trakcie edycji tamtej wiadomości bo tak patrzyłem na ten kod i wydało mi się to głupie :). Ale to chyba nie jest główny powód? |
|
pekfos |
» 2016-01-31 19:26:19 Powiedz więcej o tych danych. |
|
1 2 3 « 4 » 5 |