2

静的マルチマップが必要ですが、クラスフィールドとしては使用したくありません。'cos1つのメソッドでのみ必要です。私はそれを書いていますが、初期化コードが関数の最初の呼び出しでのみ実行される関数内でこのマップを初期化する他の方法ではありませんか?

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
}
4

2 に答える 2

6

C++11 コンパイラを使用している場合は、初期化リストを使用できます。

static std::multimap<int, char> err = {
    { 1, 'a' },
    { 2, 'b' },
    { 3, 'v' },
    { 4, 'c' }
};
于 2012-12-19T17:25:16.577 に答える
4

入力された値を返す関数を作成し、関数を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
    //...
}
于 2012-12-19T17:32:45.677 に答える