итератор набора в массиве c ++ - PullRequest
0 голосов
/ 16 января 2019
#include <iostream>
#include <unordered_set>

using namespace std;
void arraySet(unordered_set<int> n[]){
    for(auto it1 = n->begin(); it1!= n->end(); it1++){
        cout << "n[" <<*it1<<"]: ";
        // for(auto it = it1->begin(); it!= it1->end(); it++){
        //     cout << *it <<" ";
        // }
        cout << endl;
    }
}
int main()
{
    unordered_set<int> n[3];
    n[0].insert(734);
    n[0].insert(23);
    n[0].insert(634);
    n[1].insert(2);
    n[1].insert(1);
    n[2].insert(1);
    arraySet(n);

    return 0;
}

Может кто-нибудь помочь мне объяснить, как перебирать этот набор внутри массива. Я считаю, что простой способ - это преобразовать его в набор внутри вектора.

1 Ответ

0 голосов
/ 16 января 2019

Размер массива также должен быть передан в функцию, чтобы вы могли перебирать все sets массива.При простой передаче указателя размер не может быть определен, и разыменование n->begin будет выполнять итерацию только по первому набору.

void arraySet(unordered_set<int> n[], int size) {
    for (auto i = 0; i < size; i++) {
        for (auto it1 = n[i].begin(); it1 != n[i].end(); it1++) {
            cout << "n[" << *it1 << "]: ";
            // for(auto it = it1->begin(); it!= it1->end(); it++){
            //     cout << *it <<" ";
            // }
            cout << endl;
        }
    }
}
int main()
{
    unordered_set<int> n[3];
    n[0].insert(734);
    n[0].insert(23);
    n[0].insert(634);
    n[1].insert(2);
    n[1].insert(1);
    n[2].insert(1);
    arraySet(n,3);

    return 0;
}

Или вы можете использовать std::vector для хранения наборов и передачи его вместо этого.

std::vector<unordered_set<int>> n(3); // Sets the size to 3 elements

Определение функции будет изменено на

void arraySet(std::vector<unordered_set<int>>& n) {
    for (size_t i = 0; i < n.size(); i++) {
        for (auto it1 = n[i].begin(); it1 != n[i].end(); it1++) {
            cout << "n[" << *it1 << "]: ";
            // for(auto it = it1->begin(); it!= it1->end(); it++){
            //     cout << *it <<" ";
            // }
            cout << endl;
        }
    }
}
...