[c++] porównywanie tysięcy liczb
Ostatnio zmodyfikowano 2017-12-07 20:00
grzeso Temat założony przez niniejszego użytkownika |
[c++] porównywanie tysięcy liczb » 2017-12-05 20:36:06 Witam Mam taki problem, mam dwa zbiory po 10tys liczb z zakresu 1-100000. Liczby są wylosowane, nie mogą się w zbiorze powtórzyć, ale w dwóch zbiorach mogą się powtarzać. I chce sprawdzić ile z tych liczb się powtórzyło. Oczywiście mogę to zrobić tak: int ile_sie_powtarza = 0;
for( int i = 0; i < 100000; i++ ) { for( int j = 0; j < 100000; j++ ) { if( zbior1[ i ] == zbior2[ j ] ) { ile_sie_powtarza++ } } }
tylko szukam jakiegoś lepszego sposobu, z użyciem obiektówki, bo wylosowane zbiory pochodzą z dwóch różnych klas. |
|
pekfos |
» 2017-12-05 20:54:48 Sortowanie byłoby dobrym startem. |
|
grzeso Temat założony przez niniejszego użytkownika |
» 2017-12-05 20:59:56 W celu przyśpieszenia znalezienia pary?
Ogólnie to nie chciałbym używać tego fragmentu kodu który napisałem wcześniej. Da się to tak zrobić? |
|
Luq |
» 2017-12-05 21:02:25 Można użyć std::set lub std::unordered_set. |
|
grzeso Temat założony przez niniejszego użytkownika |
» 2017-12-05 21:12:48 coś na zasadzie: set < int > liczba;
liczba.insert( zbior1[ i ] ); liczba.insert( zbior1[ i + 1 ] ); (...)
if( liczba.find( zbior2[ i ] ) ) "ile_sie_powtarza++ ";
|
|
pekfos |
» 2017-12-05 21:16:26 Nie licząc wszystkich błędów w tym kodzie, tak. |
|
grzeso Temat założony przez niniejszego użytkownika |
» 2017-12-05 21:35:39 Pewnie że nie licząc, bo to tak tylko orientacyjnie.
a jakby zrobić dwa te sety i do dwóch wepchnąć liczby to da się jakoś szybko porównać ile jest powtórzonych?
albo ewentualnie jakoś bardziej obiektowo to napisać? |
|
Monika90 |
» 2017-12-05 21:38:43 Ponieważ zakres jest bardzo mały [1, 100000] i liczby się nie powtarzają, to możesz użyć std::vector<bool> albo nawet vector<char>. ewentualnie jakoś bardziej obiektowo to napisać?
|
Ale co rozumiesz przez obiektowo? |
|
« 1 » 2 |