C/Visual C - desesperado

 
Vista:

desesperado

Publicado por ima (36 intervenciones) el 11/07/2001 13:03:43
Hola!

#include <hash_map.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct eqstr
{
bool operator()(const char* s1, const char* s2) const
{
return strcmp(s1, s2) == 0;
}
};

hash_map<const char*, int, hash<const char*>, eqstr> months;


months["may"] =31;
months["june"] =5;
............................................................
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Quiero que esa tabla hash sea memoria estatica.
Se puede hacer eso.

Gracias!




Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

desesperado

Publicado por Alejandro (913 intervenciones) el 03/10/2024 19:43:31
¡Hola Ima! En C++, no es posible crear una tabla hash estática utilizando la biblioteca estándar. La biblioteca estándar de C++ proporciona la clase `std::unordered_map` para implementar tablas hash, pero esta clase utiliza memoria dinámica para almacenar los elementos de la tabla.

Sin embargo, puedes utilizar un arreglo estático de tamaño fijo junto con una función de hash personalizada para simular una tabla hash estática. Aquí hay un ejemplo de cómo podrías hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <string.h>
 
const int TAMANO_TABLA = 100;
 
struct Elemento {
    const char* clave;
    int valor;
};
 
Elemento tabla[TAMANO_TABLA];
 
int calcularIndice(const char* clave) {
    // Implementa tu propia función de hash aquí
    // Puedes utilizar una función de hash como la función de módulo
    int suma = 0;
    int longitud = strlen(clave);
    for (int i = 0; i < longitud; i++) {
        suma += clave;
    }
    return suma % TAMANO_TABLA;
}
 
void insertarElemento(const char* clave, int valor) {
    int indice = calcularIndice(clave);
    tabla[indice].clave = clave;
    tabla[indice].valor = valor;
}
 
int buscarElemento(const char* clave) {
    int indice = calcularIndice(clave);
    if (tabla[indice].clave != nullptr && strcmp(tabla[indice].clave, clave) == 0) {
        return tabla[indice].valor;
    }
    return -1; // Valor de retorno para indicar que la clave no se encontró
}
 
int main() {
    insertarElemento("may", 31);
    insertarElemento("june", 5);
 
    std::cout << "Valor de 'may': " << buscarElemento("may") << std::endl;
    std::cout << "Valor de 'june': " << buscarElemento("june") << std::endl;
 
    return 0;
}

En este ejemplo, utilizamos un arreglo estático `tabla` de tamaño `TAMANO_TABLA` para simular la tabla hash. La función `calcularIndice` se encarga de calcular el índice en la tabla utilizando una función de hash personalizada. Luego, las funciones `insertarElemento` y `buscarElemento` se utilizan para insertar y buscar elementos en la tabla, respectivamente.

Recuerda que esta implementación es básica y no maneja colisiones. Si dos claves tienen el mismo índice calculado, se producirá una colisión y los elementos se sobrescribirán. Para manejar colisiones, puedes utilizar técnicas como encadenamiento o direccionamiento abierto.

Espero que esta información te sea útil para simular una tabla [i]hash
estática en C++. ¡Buena suerte con tu programación!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar