From Lazarus wiki
Jump to navigationJump to search


StringHashMap is a string -> pointer associative map container. It is implemented in a fast and memory efficient way. The search time of a hash map is constant, it does not depend on the amount of data (assuming there is enough memory and no swapping). Millions of elements is no problem.

The unit name is StrHashMap.pas and it was modified from unit JclStrHashMap.pas which is part of Jcl library.

The purpose was to make it compile and work with FPC (Free Pascal Compiler). In the process lots of code with conditional compilation directives was removed and also many unit dependencies were removed.

The download contains:

  • Source unit file
  • Comprehensive demo program which builds a database of South Park episodes and then searches them swiftly using a hash map lookup :-)
  • README.txt file which basically tells you about this document and about the demo program.


Juha Manninen <juha dot manninen (at) phnet dot fi>

+ the original authors of Jcl code.


This code is licensed under the same terms as Jcl library.


The latest stable release can be found on GitHub:

There is a "Download Source" button available.

Change Log

  • Version 1.0 2009-11-25

Dependencies / System Requirements

  • None. Pure Pascal.

Status: Stable

Issues: It turned out there are about similar container classes in FPC's libraries so this one is not published in CCR. I published it in GitHub instead.


Just include unit StrHashMap in the "uses" section. Set path for it in project settings if needed.

The HashMapDemo1 Example Application

To install and run:

  • From Example directory open HashMapDemo1.lpi
  • Build it
  • Run it at console so that you can see the output.
  • Inspect the source code based on the output.

The example application first builds a database of South Park episodes and then demonstrates the following features of StringHashMap:

  • Search data records with lightning speed using hash keys.
  • Array syntax: Map[Key]
  • Find function: Map.Find(Key, Pointer)
  • FindData function: Map.FindData(Pointer, Key)
  • Iterating elements
  • Using the data pointer as integer, making a very efficient word counter.

See also