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 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:

C/C++
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;
}
P-144266
pekfos
» 2016-01-31 19:46:05
Teraz jest tak:
Nawet się nie kompiluje.

A co konkretnie?
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?

C/C++
void utworzZestawW( vector < Slownik > slownik, vector < Klasa > klasa, vector < ZestawW >& tab )
Referencje!
P-144272
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:

C/C++
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.
P-144276
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.
P-144278
hit
Temat założony przez niniejszego użytkownika
» 2016-01-31 20:03:02
Bingo. Dzięki za pomoc :)
P-144281
1 2 3 4 « 5 »
Poprzednia strona Strona 5 z 5