初始化静态std :: multimap在其中声明的方法

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

本文关键字:声明 方法 在其中 multimap 静态 std 初始化      更新时间:2023-10-16

我需要具有静态多映射,但是我不想作为类字段进行静态多映射,'cos我只需要一种方法。我写的是这样,但是不是有其他方法可以在功能中初始化此映射,而是初始化代码只能在函数上首次调用吗?

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
}

如果您有C 11编译器,则可以使用初始化列表:

static std::multimap<int, char> err = {
    { 1, 'a' },
    { 2, 'b' },
    { 3, 'v' },
    { 4, 'c' }
};

写一个返回填充的multimap并调用功能的函数:

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
    //...
}