Czy można pominąć elementy tablicy które wcześniej już były sprawdzane ?

0

Mam taką np tablicę

QVector<int> v1{1,2,3,1,4,5,6,1}; //są to dane zawierające duplikaty

teraz pytanie jest takie:
iterując po kolejnych elementach tej tablicy 0,1,2,3... n i znajdując duplikat w tej tablicy, to czy jest możliwe napisać kod w taki sposób aby przy ponownym przeglądaniu tej tablicy w poszukiwaniu duplikatu, można pominąć element tablicy który wcześniej został znaleziony jako duplikat ? Chodzi o to aby nie powtarzało się coś co już wcześniej było znalezione i kod nie iterował po elementach które w sumie już wcześniej przetwarzał

Nie podawać kodu, tylko chciałbym znać odpowiedź czy taki trick jest możliwy do zrealizowania ?

Chciałem dodać, że:

  1. tutaj chodzi o zliczenie ile ich jest. Nie chodzi o to, że chcę je umieścić w QMultimap lub innym kontenerze, który "akceptuje" duplikaty
  2. nie chcę tego celowo sortować - bo chcę mieć dane losowo porozrzucane w różnych miejscach

po prostu chcę to napisać

2

To może użyj Set zamiast vektora?

2
template <typename Range, typename F>
void forEachUnique(Range&& r, F f)
{
    std::unordered_set<std::decay_t<decltype(*std::begin(r))>> seenItems;
    for (auto& x : r) {
        if (seenItems.insert(x).second) {
            f(x);
        }
    }
}

https://godbolt.org/z/1Pr6Wr1aY

0

Daj drugą tablicę i pushuj tam wartości które się duplikują (indexy ich) i dodaj funkcję która sprawdzi każdy element zanim go obsłużysz (czy jest w drugiej tablicy).

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