プロジェクトのために、私はstd::unordered_map
. 残念ながら、マップ全体をハードコーディングするしかありません。そこで、初期化を複数のファイルに分割することにしました。
class OpeningBook
{
public:
OpeningBook();
private:
std::unordered_map<std::string, int> opening_database_;
void init1();
void init2();
void init3();
void init4();
void init5();
};
コンストラクターはinit
関数を呼び出すだけです。
OpeningBook::OpeningBook()
{
init1();
init2();
init3();
init4();
init5();
}
これらはすべて次のようになります。
void OpeningBook::init1()
{
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000001100000-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1100",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100001-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1010",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100010-1-1000",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-1000000100000-1-1001",5000));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-100000010000-11-1000",0));
opening_database_.insert(std::pair<std::string, int>("0001000000-10000001000000-100000010000-10-1100",5000));
// continues
}
ただし、コードが の左中かっこに到達するとすぐにinit1()
、スタック オーバーフロー例外がスローされます。unordered_map
がヒープ上にあるので、スタックオーバーフローは起きないと思っていました。どうしたの?これを修正するにはどうすればよいですか?