Boost logo

Boost :

From: Meador Inge (meadori_at_[hidden])
Date: 2006-06-28 23:36:54

A typical idiom in C is to initialize map data structure statically.
For example:
    static struct name_age
        const char* name;
        int age;
    } name_age_map[] =
        {"Will", 50},
        {"James", 32},
    static const struct name_age* map_begin = ...;
    static const struct name_age* map_end = ...;

    void foo()
       const struct name_age* na = lookup_by_name(map_begin, map_end,
       if (na != map_end)
          /* process */
This is very convenient when one knows that the contents of the map
will never change at runtime. However, writing the map data
structures and lookup code gets old quick. I have not found an
existing way nicely mirror this style in C++. I have being playing
around with something similar in spirit to boost::array. Similar in
that it can be initialized statically using an initialization list
relying on a POD class for the implementation. So the above example
would look something like:
    static_map<const char*, int, 2> name_age_map =
        "Will", 50,
        "James", 32,

    void foo()
       static_map<const char*, int, 3>::iterator it =
       if (it != name_age_map.end())
          // process

Static_map::find would just be a simple linear search. However, there
could be another type, say sorted_static_map, that relies on the keys
in the initialization list to be sorted by the user. Then a binary
search could be used for sorted_static_map::find.

Does anyone else have a need for such a beast?


Boost list run by bdawes at, gregod at, cpdaniel at, john at