2010-06-11 3 views
1

Existe-t-il un moyen d'implémenter un multimap C++ en Perl?Perl et Multimap

+3

Oui. Que recherchez vous exactement? – cjm

+2

En l'état, la question est * très * vague. – Zaid

+0

Je ne suis pas d'accord pour dire que cette question est particulièrement vague ou imprécise, tant que vous connaissez un multimap C++. Le hash de array refs est immédiatement ce que je pensais, et c'était déjà posté. – frankc

Répondre

7

Utilisez un hash of arrays.

my %students = (# keys are IDs, values are enrollments 
    100023 => [qw(Geography Mining)], 
    100058 => [qw(Geography Geology Woodcraft)], 
); 
+1

juste pour être précis, vous voulez vraiment un hachage de refs tableau – frankc

3

Si par multimap vous voulez dire le C++ multimap, alors la réponse est oui. En Perl, une carte correspond à un hachage. La valeur associée à une clé donnée dans le hachage peut être une référence à un hachage. Perl ne nécessite pas non plus d'utiliser -> après la première opération d'indexation, donc au lieu de dire $h{key1}->{key2}, vous pouvez juste dire $h{key1}{key2} ce qui vous donne une illusion convaincante d'un hachage multidimensionnel.

est un exemple:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my %h; 

my $i; 
for my $k (qw/one two three/) { 
    for my $j (qw/a b c/) { 
     $h{$k}{$j} = $i++; 
    } 
} 

print "one b should be 1: $h{one}{b}\n", 
    Dumper \%h; 
+0

Un hachage Perl correspond en réalité à un C++ unordered_map pas une carte. Contrairement aux hachages Perl et unordered_map, map et multimap sont en réalité des arbres et conservent l'ordre (et n'offrent donc qu'un accès au temps logarithmique au lieu du temps constant). – lwho