我正在尝试使用以下代码在地图中使用地图;
map<map <int,int>,int > multimap;
现在我想插入这样的数据multimap[1]
--->(2,3),multimap[4]
--->(5,6)。我一直在尝试按以下方式插入它,但我想有一个我似乎无法弄清楚的语法错误!
multimap.insert(pair<int,pair<int,int>(2,3)>(1));
任何帮助将不胜感激。添加后,如何使用迭代器显示值?
我正在尝试使用以下代码在地图中使用地图;
map<map <int,int>,int > multimap;
现在我想插入这样的数据multimap[1]
--->(2,3),multimap[4]
--->(5,6)。我一直在尝试按以下方式插入它,但我想有一个我似乎无法弄清楚的语法错误!
multimap.insert(pair<int,pair<int,int>(2,3)>(1));
任何帮助将不胜感激。添加后,如何使用迭代器显示值?
地图模板需要两个参数map<key, value>
。密钥必须有某种方式将自己与其他密钥进行比较。map
它使用<
运算符,所以如果你用 a 键,你map<int,int>
会遇到问题,因为没有<
为任意地图定义。
尝试
map<int, map<int, int> > multimap;
如果你想要一个multipmap,那么你需要使用一个multimap :) 这是声明和插入语句。
typedef pair<int, int> valPair;
multimap<int, valPair> mmap;
mmap.insert(make_pair(1, make_pair(2, 3)));
mmap.insert(make_pair(1, make_pair(4, 5)));
for(multimap<int, valPair>::iterator it = mmap.begin();
it != mmap.end(); ++it)
{
cout << "Key: " << it->first << " Vals:(";
<< it->second.first << ", " << it->second.second << ")" << endl;
}
-首先,您的代码中没有多重地图 - 只是一个名为“多重地图”的地图。
-其次,结构
map< map<int, int>, int > multimap;
不会映射 1-->2, 3,因为您使用映射作为键,使用 int 作为值。
-第三,您收到构建错误的原因是因为您的案例中的 insert() 方法需要
pair< map<int, int>, int >
你可能想要的是这样的:
map< int, pair<int, int> > multimap;
pair<int, int> myPair( 2, 3 );
multimap.insert( pair< int, pair<int, int> >( 1, myPair ) );
map< int, pair<int, int> >::iterator iter = multimap.begin();
while( iter != multimap.end() )
{
int key = iter->first;
pair<int, int> aPair = iter->second;
++iter;
}
在我看来,您混淆了地图和多地图,以及键和值。
如果您想要一个将键 '1' 映射到值 '(2,3)' 和 '(4,5)' 的映射,请执行以下操作:
multimap<int,pair<int,int>> myMap { {1,{2,3}}, {1,{4,5}} };
或在 C++03 中:
multimap<int,pair<int,int> > myMap;
myMap.insert(make_pair(1,make_pair(2,3)));
myMap.insert(make_pair(1,make_pair(4,5)));
在遍历映射时,每个项目都引用一个对,其中第一个项目是键,第二个项目是值。
for(auto &i : myMap) {
std::cout << "Key: " << i->first
<< " Value: (" << i->second.first << ',' << i->second.second << ")\n";
}
或者在 C++03 中
for(multimap<int,pair<int,int> >::const_iterator i(myMap.begin()),end(myMap.end()); i!=end; ++i) {
std::cout << "Key: " << i->first << " Value: (" << i->second.first << ',' << i->second.second << ")\n";
}
这将打印出:
Key: 1 Value: (2,3)
Key: 1 Value: (4,5)