C++, can I statically initialize a std::map at compile time?
It's not exactly static initialization, but still, give it a try. If your compiler doesn't support C++0x, I'd go for std::map's iteration constructor:
std::pair<int, std::string> map_data[] = {
std::make_pair(1, "a"),
std::make_pair(2, "b"),
std::make_pair(3, "c")
};
std::map<int, std::string> my_map(map_data,
map_data + sizeof map_data / sizeof map_data[0]);
This is pretty readable, doesn't require any extra libraries and should work in all compilers.
Not in C++98. C++11 supports this, so if you enable C++11 flags and include what g++ suggests, you can.
Edit: from gcc 5 C++11 is on by default
You can use Boost.Assign library:
#include <boost/assign.hpp>
#include <map>
int main()
{
std::map<int, char> example =
boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c');
}
However, as Neil and others pointed in the comments below, this initialization occurs in runtime, similarly to UncleBean's proposal.