mardi 23 mai 2017

C++ - Check whether pointer in pointer array is already "filled"

I am working on a project for my University where i have to implement a Hash table. I am quite new to c++, so please forgive me if I am not specific enough or if I have completely wrong assumptions.

Soo..my main problem is that I have a so called "Bucket" which is a struct in my program and which contains a pointer array of N(template parameter) places.

struct Bucket {
    T *kptr{ nullptr };
    Bucket *bptr{ nullptr }; //For overflow chains (linear Hashing)
    Bucket(Bucket *bptr = nullptr) : kptr(new value_type[N]),bptr(bptr) {}
    ~Bucket() { if(bptr) delete[] bptr; if (kptr) delete[] kptr; }
};

In my main Class named My_Set for example I have an additional Bucket *table of [1<

My first assumption was to initialize the kptr array to nullptr and then in the insert method to make something like

void insert(Bucket &bkt, T *key) {
    for (int i=0; i<N, ++i) {
        if(bkt.kptr[i]) kptr[i] = key; 
    }
}

But that´s not possible because then kptr should be Bucket **kptr and not Bucket *kptr as far as i understood it. So, is there any other efficient way to check one single field of an array if it has been assigned to an Object already or not?

IMPORTANT: I am not allowed to use STL Containers, Smart Poitners and similar things which would make the whole thing much easier. Thanks!

Aucun commentaire:

Enregistrer un commentaire