# IDGenerators IDGenerators provides several classes that generate unique identifyers which are designed to fullfill specific requirements. The classes may also be used as a Functor, but be aware that parallelism is generally not supported. ## GUIDGenerator The GUIDGenerator class generates Globally Unique IDentifyers, it is not thread-safe.
    value_type
| The type of the generated GUIDs.
    GUIDGenerator()
| Constructor.
    value_type generate()
| Generates one GUID.
    value_type operator()()
| Generates one GUID.
    unsigned count() const
| Returns the number of generated values.
## KeyGenerator The class template <typename T = unsigned> KeyGenerator generates keys for binary-tree-based structures such as STL's map. It is not thread-safe. Generally, binary trees have logarithmic time for certain operations, based on the assumption that the tree is balanced. Inserting items in sorted order in a tree results in a maximally un-balanced tree, i.e. a structure resembling a linked list rather than a tree. As a result, operations that usually run in logarithmic time require linear time. The KeyGenerator is designed to generate values that should result in a balanced tree when inserted sequentially. Note that a KeyGenerator will typically always produce the same sequence, a reset() function allows a reset to the initial state.
    value_type
| The generated key-types, alias for template parameter "T".
    template <typename T = unsigned>
    KeyGenerator()
| Constructor.
    value_type generate()
| Generates one key.
    value_type operator()()
| Generates one key.
    void reset()
| Reset to initial state.
    unsigned count() const
| Returns the number of generated values.
## IncGenerator The class template <typename T = unsigned> IncGenerator generates incremental values: 0, 1, 2, .... It is not thread-safe. Note that an IncGenerator will typically always produce the same sequence, a reset() function allows a reset to the initial state.
    value_type
| The generated index-types, alias for template parameter "T".
    template <typename T = unsigned>
    IncGenerator()
| Constructor.
    value_type generate()
| Generates one index.
    value_type operator()()
| Generates one index.
    void reset()
| Reset to initial state.
    unsigned count() const
| Returns the number of generated values.
## Example To explain the purpose of the KeyGenerator consider the following piece of code:
    #include <map>
    #include <cvmlcpp/math/Euclid>
    #include <cvmlcpp/base/IDGenerators>

    std::map<unsigned, dPoint3D> doubleMap;

    KeyGenerator<unsigned> kGen;

    for (unsigned i = 0; i < N; ++i)
    {
    	dPoint3D d;

    	// Option A
    	doubleMap.insert(std::pair<unsigned, double>(i, d));

    	// Option B
    	doubleMap.insert(std::pair<unsigned, double>(kGen(), d));
    }
In this code, using kGen() requires a bit more processing, but will result in a better balanced tree.