Objet mapping équivalent à un QMap Qt

Résolu
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 - 21 oct. 2009 à 22:34
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 22 oct. 2009 à 14:46
Bonjour,

je recherche une équivalence dans la vcl ou autre pascal à un objet QMap de Qt.
Cet objet permet le stockage la liste d'une valeur clé et d'une valeur texte par exemple ([1;'un'], [2;"deux"], ...)
et on peut retrouver une valeur par sa clé, parcourir la liste, ...
Je sais que l'on peut gérer cela avec une liste chaînée, mais existe-t-il un objet tout fait dans la libairie de Delphi ?
Merci.
Luc.

3 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
22 oct. 2009 à 14:01
alors plusieurs possibilités:
Pour une association ayant une chaine pour clé, tu peux utiliser un descendant de TStrings (TStringList):
SL.AddObject('LaCle', MonObjetAssocié);
MonObjetAssocié := SL.Objects[SL.IndexOf('LaCle')];

ou un TBucketList (ou TObjectBucketList) pour une clé entiere, objet, ... :
BL.Add(Pointer(1), Pointer('Valeur'));
MaValeur := BL.Data[Pointer(1)];


Par contre, si tes valeurs sont des chaines, je ne sais pas comment delphi gere la liberation dans le cas ou elle sont stockées dans un pointer, à verifier.
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 oct. 2009 à 14:46
Salut,

TStrings permet bien plus de choses et plus simplement encore.

En fait TStringList peut fonctionner comme un fichier ini:

[hr][b]var

 /bSL: TStrings;
[b]begin
  /bSL :=  TStringList.Create;
  [b]try
    /bSL.Values['Nom'] := 'Toto';
    Label1.Caption := SL.Values['nom'];
  [b]finally
    /bSL.Free;
   end ;
end;
[hr]la ligne SL.Values['Nom'] : = 'Toto'; ajoute une entrée sous la forme "Name=Value Nom=Toto" si 'Name' existe déjà seule Value sera remplacée.
regarde aussi du coté des propriétés :
Names et IndexOfName


[hr]@+Cirec
[hr]
3
beckerich Messages postés 302 Date d'inscription jeudi 29 septembre 2005 Statut Membre Dernière intervention 17 septembre 2013 2
22 oct. 2009 à 14:35
Merci Guillemouze,

je savais qu'on pouvait associer, et je l'utilise dans mes programmes, un objet à un élément d'un TStringList. Je ne retrouve néanmoins pas la simplicité d'utilisation d'un QMap. Il faut faire un transtypage pour écrire ou lire une donnée, que ce soit un objet ou un type standard.
Luc.
0
Rejoignez-nous