Qt: Sprawdzenie czy para liczb znajduje sie w zbiorze (wylosowana)

0

Witam,
Mam problem: chcę wylosować parę liczb całkowitych. Ważne, aby ta para liczb losowała się bez powtórzeń. Na początku myślałem o tablicy dwuwymiarowej, ale uznałem że przeszukiwanie jej by zbyt dużo trwało, bo to tablica bajtów dla dużego pliku. Losowanie liczb w Qt oraz Sleep na bazie QThread mam już zrobione.

Mój pomysł był następujący:
a) Tworzę sobie strukture:

struct random_bit_array {
    int byte;
    int bit;
};

b) Losuje dwie liczby i umieszczam je w strukturze.
c) Jeżeli takiej struktury nie ma na liście to umieszczam ją, jeśli nie losuje tak długo aż trafię na taki bit aż będzie unikalny.

Mój pierwszy pomysł to użycie QSet<random_bit_array> oraz wykonanie insert, jeśli nie ma takiego obiektu. Niestety, to nie działa. Na pewno można by to zrobić na wiele sposobów. Pierwsze co przychodzi na myśl to sortowanie dwuwymiarowej tablicy dynamicznej, ale dość skomplikowane to jest i chyba można prościej?

0

Dodawaj do QSet aż będzie taka ilość jaka jest potrzebna, co może w tym nie działać? Chyba musisz opisać to dokładniej.

Musisz też zaimplementować operator== dla Twojej klasy (struktury) oraz przeciążyć dla niej funkcję qHash (możesz użyć dwóch qHash dla int i wykonać XOR na wynikach aby mieć jedną liczbę - nie wiem na ile to jest dobre rozwiązanie).

0

Dzięki za wskazówkę. Dziś jest już dość późno i tego nie skończę, ale powiem czy się udało. Nie rozumiem związku qHash i qset, ale operator przeciążę i się odezwę. Możliwość dodawania do zbioru aż będzie tyle ile trzeba wydaje się bardzo sensowna, dzięki!

1

dlaczego tworzysz własną strukturę, a nie skorzystasz z QPair?

0

Nie byłem świadomy jej istnienia, ale widzę że ma już operator ==, więc użyje jej dzięki.

1

Zamiast pary bajt/bit może po prostu numer bitu (bajt*8+bit)? Będzie prościej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1