## 13 Data Structures

Whenever possible you should try to use one of the data structures available. If the data structures do not provide enough functionality for your needs you should consider enhancing them rather than writing something from scratch.

### 13.1 Vector

The `vector` class is defined in `vector.hpp` and works the same way as the standard STL `vector` does except that it doesn’t have as many constructors.

### 13.2 BasicList

`BasicList` is a simple list structure which can either be implemented as a singly or doubly linked list. It is defined in `basic_list.hpp`.

### 13.3 StringMap

`StringMap` is an associative array for strings. You should try to use this when ever possible to avoid code bloat. It is defined in `string_map.hpp`.

### 13.4 Hash Tables

Several hash tables are provided when `StringMap` is not appropriate. These hash tables provide a `hash_set`, `hash_multiset`, `hash_map` and `hash_multimap` which are very similar to SGI’s STL implementation with a few exceptions. It is defined in `hash.hpp`.

### 13.5 BlockSList

`BlockSList` provided a pool of nodes which can be used for singly linked lists. It is defined in `block_slist.hpp`.