Łączenie zakresów kontenerów dla begin() i end()

0

Czy istnieje możliwość aby połączyć zakresy wewnętrznych struktur jak w przykładzie poniżej aby można było użyć takiej klasy w pętli for opartej na zakresie w celu przeglądu wszystkich wartości z wewnętrznych struktur, w tym wypadku z wewnętrznej QHash?

class Container
{
public:
    QHash<QString, int>::iterator begin();
    QHash<QString, int>::iterator end();

private:
    QHash<QString, QHash<QString, int>> d;
};


QHash<QString, int>::iterator Container::begin()
{
    // jak połączyć zakres i zwrócić begin?
}

QHash<QString, int>::iterator Container::end()
{
    // jak połączyć zakres i zwrócić end?
}


for(int x : Container )
  qDebug()<< x;
2

musiałbyś napisać własny iterator.

0

A czy użycie std::reference_wrapper i zbudowanie referencji do wszystkich wartości podczas wywołania begin() byłoby dużo mniej wydajne niż własny iterator?

class Container
{
public:
    QList<int>::iterator begin();
    QList<int>::iterator end();

private:
    QHash<QString, QHash<QString, int>> d;
    QList<int> refs;

};


QList<int>::iterator Container::begin()
{
    refs.clear();
    for(const QString &key : d.keys() ) {
        for(const QString &name : d.value(key).keys() ) {
            refs.append(std::ref(d[key][name]));
        }
    }

    return refs.begin();
}

QList<int>::iterator Container::end()
{
    return refs.end();
}

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