[STL] Przekazanie wektora wskaźników do funkcji.
Ostatnio zmodyfikowano 2016-01-31 20:03
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 19:35:42 A co konkretnie? Tak jak napisałem wyżej, wszystko to wczytuję do stringów. Docelowo tych pól ma być jeszcze więcej i ma się tworzyć kilka takich zestawień dla innych danych. Większość tych stringów ma mniej niż 15 znaków. Jak zakomentowałem przypisywanie do zmiennej temp i w sumie puściłem pustą pętlę to i tak leci z prędkością ok. 5 tys/s czyli znacznie szybciej ale widzę, że tak szybko jak w C# to chyba nie będzie mogło się wykonywać? Napisz co konkretnie chcesz wiedzieć o tych danych. Teraz jest tak: void utworzZestawW( vector < Slownik > slownik, vector < Klasa > klasa, vector < ZestawW >& tab ) { ZestawW temp; Slownik s; cout << "Trwa tworzenie zestawienia." << endl; vector < Slownik >::iterator itSlow; for( size_t i = 1; 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( i % 5000 == 0 ) cout << i << endl; } a++; } cout << "Zestawienie utworzone." << endl; }
|
|
pekfos |
» 2016-01-31 19:46:05 Nawet się nie kompiluje. W najlepszym przypadku: wszystko. Od tego zależy wybór odpowiednich rozwiązań. Jakie dane chcesz ze sobą łączyć, w jakich ilościach są każde z nich, itd. Pisałeś, że dla każdego rekordu jednego rodzaju istnieje jeden (dokładnie jeden?) drugiego rodzaju. Jeśli jest tak, możesz wszystko posortować wg tego samego kryterium i łączenie nie będzie wymagało żadnego szukania. tak szybko jak w C# to chyba nie będzie mogło się wykonywać? |
A w C# robisz w ogóle to samo? Kod w C++ kompilujesz we właściwy sposób? void utworzZestawW( vector < Slownik > slownik, vector < Klasa > klasa, vector < ZestawW >& tab )
|
Referencje! |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 19:55:22 A wybacz, zmieniałem tutaj ręcznie zanim tam wkleiłem: void utworzZestawW( vector < Slownik > slownik, vector < Klasa > klasa, vector < ZestawW >& tab ) { ZestawW temp; Slownik s; cout << "Trwa tworzenie zestawienia." << endl; vector < Slownik >::iterator itSlow; for( size_t i = 1; i < klasa.size(); i++ ) { 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( i % 5000 == 0 ) cout << i << endl; } cout << "Zestawienie utworzone." << endl; }
Co do C# no to tam kod wygląda inaczej, więc może nie ma co porównywać w ten sposób. Jeśli chodzi o łączenie to w tym przypadku tak może będzie, ale mam też takie struktury jak magazyn i przy nich również słownik no i tam dla x magazynów rekord w słowniku może być ten sam (danych w magazynie jest załóżmy 200 tys. a w słowniku tylko tysiąc ). Kompiluję w trybie Debug, x86 Local Windows Debbuger (Visual Studio 2015). Dodałem referencje do pozostałych wektorów i jest już trochę lepiej - jakieś 5 tys. rekordów na sekundę z przypisywaniem do temp. |
|
pekfos |
» 2016-01-31 20:01:13 Kompiluję w trybie Debug, x86 Local Windows Debbuger (Visual Studio 2015). |
Wydajność porównuj w Release, a nie Debug. |
|
hit Temat założony przez niniejszego użytkownika |
» 2016-01-31 20:03:02 Bingo. Dzięki za pomoc :) |
|
1 2 3 4 « 5 » |