Austin Jiang
Austin Jiang

Reputation: 31

iterator a set in array c++

#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;
}

Can anyone help me explain how to iterator through this set inside array. I believe an easy way is to convert it to set inside vector.

Upvotes: 0

Views: 777

Answers (1)

Wander3r
Wander3r

Reputation: 1881

Size of the array needs to be passed as well to the function for you to be able to iterate through all the sets of the array. With just passing the pointer, size cannot be determined and dereferencing n->begin will iterate through only the first set.

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;
}

Or you could use std::vector to contain the sets and pass it instead.

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

The function definition would be changed to

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;
        }
    }
}

Upvotes: 1

Related Questions