Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2947 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  table de hashage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

table de hashage

n°1902051
Glock 17Pr​o
Posté le 03-07-2009 à 15:14:38  profilanswer
 

Je dois faire un outil qui parse des fichiers de log assez conséquent 1G0.
 
je me servais, jusqu'à présent de std::map pour stocker les lignes et pouvoir les identifier par la suite grâce à un ID.
 
J'essaye maintenant d'optimiser le temps d'éxécution et je me demandais si une unordered_map ne serait pas plus rapide..
 
et si oui en C++, existe t-il des choses en standard ?
 
Merci

mood
Publicité
Posté le 03-07-2009 à 15:14:38  profilanswer
 

n°1902062
Tarabiscot​e
Posté le 03-07-2009 à 15:48:40  profilanswer
 

La principale différence entre map et unordered_map c'est que unordered_map rajoute le calcule du hash de la clé afin de la stocker dans un entier.
 
Donc en résumant si ta clef n'est pas un entier, unordered_map sera souvent plus rapide car le hash de cette clé sera plus rapide à manipuler qu'un gros objet.
Sinon si ta clé est déjà un entier, unordered_map sera plus lent car calcule du hash en plus.

n°1902068
Glock 17Pr​o
Posté le 03-07-2009 à 16:05:16  profilanswer
 

pas mal merci, effectivement ma clef est une string

n°1902096
Glock 17Pr​o
Posté le 03-07-2009 à 16:28:05  profilanswer
 
n°1902100
Glock 17Pr​o
Posté le 03-07-2009 à 16:38:03  profilanswer
 

visual 2005 semble pas connaitre hash_map par contre :(

n°1902249
Glock 17Pr​o
Posté le 04-07-2009 à 13:41:04  profilanswer
 

c'est normal ?

n°1902950
Tarabiscot​e
Posté le 07-07-2009 à 08:38:20  profilanswer
 

Je n'ai pas visual 2005 mais tu as bien ?

Code :
  1. #include <hash_map>
  2. stdext::hash_map<...>

n°1902951
Joel F
Real men use unique_ptr
Posté le 07-07-2009 à 08:46:28  profilanswer
 

c'ets pas std::tr1::hash_map ?

n°1902961
Tarabiscot​e
Posté le 07-07-2009 à 08:57:53  profilanswer
 

http://msdn.microsoft.com/en-us/li [...] S.71).aspx

In Visual C++ .NET 2003, members of the <hash_map> and <hash_set> header files are no longer in the std namespace, but rather have been moved into the stdext namespace. See The stdext Namespace for more information.


 
Sinon il y a :

Code :
  1. #include <unordered_map>
  2. std::tr1::unordered_map


Message édité par Tarabiscote le 07-07-2009 à 08:58:21
n°1903006
Joel F
Real men use unique_ptr
Posté le 07-07-2009 à 10:02:19  profilanswer
 

[:prozac] VisualStudioG [:sadnoir]

mood
Publicité
Posté le 07-07-2009 à 10:02:19  profilanswer
 

n°1903050
Glock 17Pr​o
Posté le 07-07-2009 à 10:47:46  profilanswer
 

stdext, hum ok je mettais std

n°1903094
Polo37
Posté le 07-07-2009 à 11:45:58  profilanswer
 

Joel F a écrit :

[:prozac] VisualStudioG [:sadnoir]


Ben je vois pas pourquoi, c'est plus clair de différencier ce qui est standard (std::map) de ce qui est une extension (stdext::hash_map) de ce qui est du technical report (std::tr1::unordered_map).

n°1903200
Glock 17Pr​o
Posté le 07-07-2009 à 14:58:03  profilanswer
 

oui, entre développer sous visual ou sous linux avec emacs... le choix est vite vu


Message édité par Glock 17Pro le 07-07-2009 à 20:31:15

---------------
.
n°1904744
guepe
J'ai du noir sur la truffe ?
Posté le 12-07-2009 à 22:52:30  profilanswer
 

Je me permet de rebondir en prolongeant la question : a priori, pour moi si une clef dans une map c'est un pointeur vers un objet, j'ai toujours pensé que la clef était considérée comme un entier, l'adresse mémoire... avec bien sur l'opérateur de la classe utilisé pour le tri.
 
Donc je pensais que dans le cas d'une clef de type pointeur, utiliser un map était aussi rapide qu'un unordered_map : mais est-ce le cas ?


---------------
Un blog qu'il est bien
n°1905026
jesus_chri​st
votre nouveau dieu
Posté le 13-07-2009 à 22:33:55  profilanswer
 

houla-là...
 
- Si la clé est un pointeur, c'est hashé/comparé comme un entier, puisqu'un pointeur est, en interne, un nombre entier. La comparaison se fait par défaut avec la comparaison des pointeurs, qui est la même que les entiers. 0x0052647B < 0x0052678D par exemple, quoi qu'il soit pointé. On peut surcharger l'opérateur de comparaison.
 
- La compléxité d'un accès en table de hashage est O(1) en général, O(n) dans le pire des cas, + compléxité de la fonction de hashage.
 
- La compléxité d'un accès en map est O(c * log2(n)) où n est le nombre d'éléments et c la compléxité de la fonction de comparaison.
 
- Donc que les éléments soient des entiers ou pas, l'accès en table de hashage est plus rapide, sauf (rare) pire des cas. En gros, hash_table de donne en vitesse ce que tu perds en information, puisque tu perds l'ordre.

n°1905064
Glock 17Pr​o
Posté le 14-07-2009 à 12:02:08  profilanswer
 

je suis perdu moi,dans  une std::map les éléments sont ordonnées ??

n°1905090
jesus_chri​st
votre nouveau dieu
Posté le 14-07-2009 à 17:43:40  profilanswer
 

oui.
dans hash_map/unordered_map, non, d'où son nom.

n°1905353
Glock 17Pr​o
Posté le 15-07-2009 à 14:22:48  profilanswer
 

ça permet  quoi d'avoir les éléments ordonnées au juste ? y a bien un avantage...y a un truc qui m'échappe


Message édité par Glock 17Pro le 15-07-2009 à 14:33:31
n°1905370
Un Program​meur
Posté le 15-07-2009 à 14:42:36  profilanswer
 

Il y a des applications ou c'est utile.
 
Mais on peut aussi voir le fait que les map soient triee comme un detail d'implementation dont on a finit par dependre et qui fait partie maintenant de la spec.
 
(Les map sont contraintes de sorte qu'un arbre binaire equilibre soit l'implementation naturelle pour respecter l'interface -- qui demande une fonction de comparaison et non une fonction de hachage -- et la complexite -- operations garanties en log N alors qu'avec une table de hachage on peut degenerer en N).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1905404
Glock 17Pr​o
Posté le 15-07-2009 à 15:39:43  profilanswer
 

ah oui je vois , très intéressant , merci bien

n°1977042
hayfaa
Posté le 24-03-2010 à 22:43:07  profilanswer
 

svp j ai besoin a des info sur la fanction hachage j ai un projet

n°1977044
Elmoricq
Modérateur
Posté le 24-03-2010 à 22:53:15  profilanswer
 

C'est un peu court, jeune homme [:moonzoid:1]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  table de hashage

 

Sujets relatifs
<table> qui ne veut pas avoir de left borderINSERT en prenant 2 lignes dans la table source
"Fusionner" deux Itératorss dans une Jsp[SGBD/SQL] Date de modification des enregs d'une table Oracle
[Oracle9i]­ Connaître le couple table/colonne parent lointain d'une FKMettre mon livre d'or (php) dans une balise <table>
table partagée entre 2 préfixTable dynamique JPA/Hibernate
boucles imbriqués en une seul requette (ds la meme table quoi)pb d'utilisation table de hashage
Plus de sujets relatifs à : table de hashage


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR