Implementar un mapa de cuerdas

votos
0

Tengo que implementar una clase que se comporta como un mapa de cadenas utilizando árbol binario de búsqueda. Esta es la clase que he implementado:

template<class T>
class StringMapper {
private:
    // Pair
    struct Pair {
        std::string el1;
        T el2;
    };

    // Nod
    struct Node {
        Pair* data;
        Node* left;
        Node* right;
        Node()
        {
            data = new Pair;
        }
        ~Node()
        {
            delete data;
        }
        int nod_size()
        {
             // code here
        }
    };
    Node* root;
public:
    StringMapper()
    {
        root = 0;
    }
    ~StringMapper() {}
    void insert(std::string from, const T& to)
    {
        // code here
    }

    bool find(std::string from,const T& to) const
    {
        return find(root, to);
    }

    bool find(Node* node, const T& value) const
    {
        // code here
    }

    bool getFirstPair(std::string& from, T& to)
    {
        if(root != 0)
        {
            from = root->data->el1;
            to = root->data->el2;
            return true;
        }
        return false;
    }
    bool getNextPair(std::string& from, T& to)
    {
        if(root != 0)
        {

        }
        return false;
    }

    int size() const
    {
        return root->nod_size();
    }
};

Para ser honesto, no sé cómo implementar la función getNextPair().
Si alguien me puede ayudar se lo agradecería.

Publicado el 06/03/2011 a las 22:13
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
1

Su interfaz es un iterador interno. Usted necesidad de mantener algún tipo de indicador a dónde usted está en la iteración, y la puso en getFirstPair ().

Una vez añada este, getNextPair () sólo sirve para la siguiente. Es algo difícil de hacer esto, pero eso es su tarea, por lo que lo dejo a ti.

El actual std::maputiliza un iterador externa - que mantiene el estado de la iteración separada de la estructura de datos. La principal ventaja es la posibilidad de tener más de una iteración simultánea.

Respondida el 06/03/2011 a las 22:22
fuente por usuario

votos
1

Sin simplemente tirar el algoritmo para getNextPair, que tendrá que mantener algún tipo de iterador interno que apuntará a la par "actual". Una vez que tienes que, con el fin de averiguar el algoritmo para el siguiente par se dibuja un árbol con algunos nodos y ver cómo se puede encontrar el siguiente nodo en el árbol dado cualquier nodo en el árbol.

Respondida el 06/03/2011 a las 22:46
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more