I need to have static multimap, but I don't want do it as class field, 'cos I need it only in one method. I write it so, but isn't it any other way to initialize this map inside function that initialization code will run only with first call to the function?
static void someClass::someMethod(/**/)
{
static multimap<int, char> err;
if(err.size() == 0)
{//initialize here
err.insert(std::pair<int, char>(1, 'a'));
err.insert(std::pair<int, char>(2, 'b'));
err.insert(std::pair<int, char>(3, 'v'));
err.insert(std::pair<int, char>(4, 'c'));
}
//method logic
}
If you have a C++11 compiler, you can use initializer lists:
static std::multimap<int, char> err = {
{ 1, 'a' },
{ 2, 'b' },
{ 3, 'v' },
{ 4, 'c' }
};
Write a function that returns a populated multimap and call the function:
multimap<int, char> create_err()
{
multimap<int, char> err;
err.insert(std::pair<int, char>(1, 'a'));
err.insert(std::pair<int, char>(2, 'b'));
err.insert(std::pair<int, char>(3, 'v'));
err.insert(std::pair<int, char>(4, 'c'));
return err;
}
static void someClass::someMethod(/**/)
{
static multimap<int, char> err = create_err();
//method logic
//...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With