web-dev-qa-db-ja.com

stdマップをマップに保存する

Std :: mapの値としてstd :: mapを保存する必要があります

std::map< std::string, std::map<std::string, std::string> > someStorage;

2番目の(内部)マップに挿入する方法は?私が試した:

someStorage.insert( std::make_pair("key", std::make_pair("key2", "value2")) );

しかし、これは多くのエラーをスローします。どうしましたか?

29
Max Frai

試してください:

std::map< std::string, std::map<std::string, std::string> > someStorage;

someStorage["Hi"]["This Is Layer Two"] = "Value";
43
Martin York
someStorage["key"].insert(std::make_pair("key2", "value2")));

外側のマップでも挿入を使用する場合は、次の方法があります

std::map<std::string, std::string> inner;
inner.insert(std::make_pair("key2", "value2"));
someStorage.insert(std::make_pair("key", inner));
25
Dark Falcon

マップには、キー/値のペアを受け入れるinsertメソッドがあります。キーは文字列型なので問題ありませんが、値はnot型ペア(生成する)ですが、マップ型です。したがって、完全なマップを値として保存する必要がありますまたは初期マップ定義を変更して、値としてペアを受け入れます。

4
TToni

//これを試してください:

std::map< std::string, std::map<std::string, std::string> > myMap;

myMap["key one"]["Key Two"] = "Value";
myMap["Hello"]["my name is"] = "Value";

//マップを印刷するには:

for( map<string,map<string,string> >::const_iterator ptr=myMap.begin();ptr!=myMap.end(); ptr++) {
    cout << ptr->first << "\n";
    for( map<string,string>::const_iterator eptr=ptr->second.begin();eptr!=ptr->second.end(); eptr++){
        cout << eptr->first << " " << eptr->second << endl;

    }

}
3
Gelo

また、リストの初期化を使用できます。

someStorage.insert( std::make_pair("key", std::map<std::string, std::string> {std::make_pair("key2", "value2")}) );
0
Roma Pavlov