Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialize static std::multimap inside method where it is declared

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
}
like image 766
HelloHi Avatar asked Apr 25 '26 12:04

HelloHi


2 Answers

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' }
};
like image 124
Some programmer dude Avatar answered Apr 30 '26 21:04

Some programmer dude


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
    //...
}
like image 34
Mankarse Avatar answered Apr 30 '26 22:04

Mankarse



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!