Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[STL] Przekazanie wektora wskaźników do funkcji.

Ostatnio zmodyfikowano 2016-01-31 20:03
Autor Wiadomość
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ł.
P-144237
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...
P-144239
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ć?
P-144255
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.
P-144258
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

C/C++
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.
P-144260
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.
P-144262
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?
P-144263
pekfos
» 2016-01-31 19:26:19
Powiedz więcej o tych danych.
P-144265
1 2 3 « 4 » 5
Poprzednia strona Strona 4 z 5 Następna strona