変更: コードをより読みやすくしました
最近、ネストされた STL マップに関する質問を投稿しましたが、コードを入れていないため、同じ質問を再度行います (今回はコードが含まれています)。どんな助けでも大歓迎です。スパム行為についてお詫び申し上げます。
私は過去 4 日間何かに行き詰まっており、今はガイダンスが必要です。
ここに私のデータ構造があります:
class demo1
{
int a, b, c, d, e;
}
class demo2
{
map(int, demo1) map1
}
map(string, demo2) map2;
vector< pair<int, demo1> > vec1;
ここで、2 つの文字列変数 (map2 の「キー」) と 3 つの int 変数 (map1 の「キー」) があるとします。map2 と map1 の間で正しいマッピングを確立するにはどうすればよいですか?
これが私が期待している出力です:
// Expected mapping output
string 1(key in map2)
int 1(key in map1) -> demo1
int2 -> demo1
int 3 -> demo1
string 2
int 1(key in map1) -> demo1
int2 -> demo1
int 3 -> demo1
コードの関連部分は次のとおりです (上記のデータ構造はヘッダー ファイルにあり、ここに私が使用するメインの .cpp ファイルがあります。実際のコードは非常に長く、関連部分のみを挿入しています)
class tmp1
{
int a, b, c, d e;
} t1;
....
if(condition is true)
{
string tmp_string // this string is a key in map2
map2.insert(make_pair(tmp_string, demo2));
}
if(another condition is true)
{
int n; // this is a "key" in map1
demo 1 d1 // create an instance of class demo1
d1.a = t1.a;
d1.b = t1.b;
d1.c = t1.c;
d1. d = t1.e;
d1.f = t1.f;
// Insert these value into map now
map1.insert(make_pair(n, d1));
vec1.push_back(make_pair(n, d1)); // vec1 is define above in the data structure section
}
これが私が出力をチェックする方法です
map(string, demo2)::iterator outer_itr;
map(int, demo1)::iterator inner_itr;
for(outer_itr = map2.begin(); outer_itr != map2.end(); outer_itr++)
{
cout << "String is " << (*outer_itr).first << endl;
vector < pair<int, demo1> >::iterator itr;
for(itr = vec1.begin(); itr != vec1.end(); itr++)
{
cout << "Int key in map1 is " << (*itr).first << endl;
cout << "Value of a is " << (*itr).second.second.a << endl;
cout << "Value of b is " << (*itr).second.second.b << endl;
cout << "Value of c is " << (*itr).second.second.c << endl;
}
}
これはマッピングを行う正しい方法ですか..?