修改:使代码更具可读性
我最近发布了一个关于嵌套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的“key”中)和3个int变量(在map1的“key”中),如何在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;
}
}
这是做映射的正确方法吗?
答案 0 :(得分:0)
阅读之后我认为你的代码只是使用demo2作为地图,正如@Leeor所提到的那样,你正在使用vec1
复制地图功能,但这实际上也发生在{ {1}}。因此,您的最终解决方案应该取消demo2
和vec1
。
有两种方法可以实现这一目标:
demo2
,那么在您的代码中,您将执行demo1
,然后您需要合并密钥map2["string 1"].map1[1]
std::map< std::pair<
std::string, int >, demo1 > map2
std::multimap< std::string, std::pair< int, demo1 > > map2
map2.insert( std::make_pair( 1, myDemo1 )
个迭代器,其中std::pair
是开始迭代器,而first
是这样的结束迭代器:second