2016-10-12 5 views
1

私はマップの宣言以下のいるマップのマップのSTLのmapにデータを挿入することができない:

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

は、私は次のようにデータを挿入しようとした:

m.insert({ "HARDWARE\\DESCRIPTION\\System\\BIOS", { "REG_SZ", { "SystemSKU", "SystemSKU" } } }); 

けどをその動作していない、何がありますデータを挿入する正しい構文ですか?

+3

これは私が今まで見た中で最高のタイトルかもしれません – Treycos

+0

あなたはやりたいと思っていますか? –

+0

@Treycos:私はそれをまっすぐに保った。 –

答えて

4

あなたはそれが初期化子リストで動作するように得ることができない場合は、古典的な方法で使用することもできます。このことができます

m["HARDWARE\\DESCRIPTION\\System\\BIOS"]["REG_SZ"]["SystemSKU"] = "SystemSKU"; 

希望を。

+0

ありがとう、その作業。 –

0

Thisリストの初期化はあなたのために動作します:

std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> m{{"HARDWARE\\DESCRIPTION\\System\\BIOS", 
         {{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }} 
      }}; 

または、使用を

m.insert({"HARDWARE\\DESCRIPTION\\System\\BIOS", 
      {{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }} //create inner maps using double braces 
     }); 

を挿入するには、STD ::マップのリストのコンストラクタ使用しています(STDを取る1 :: initializer_listを>) 。

読み書きは少し難解です。

{{または}}が一緒に使用されることに注意してください。 インナーもの{}{}全体としてマップを表すマップで単一エントリをマークし、外側の。

便宜上、他の回答がうれしいです。

+0

この宣言には何らかの問題があります。このリンクをチェックしてください。http://stackoverflow.com/questions/39895375/map-set-iterators-incompatible-c-program-crashed-during-initialization –

+0

コードにエラーはありません。私が実行しようとしたときにあなたから提供されたリンク。 –

+0

msビジュアルスタジオ2013でエラーが発生しますが、msビジュアルスタジオ2015およびg ++ではエラーは発生しません。msビジュアルスタジオ2013を使用しています。 –