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));

任何帮助将不胜感激。添加后,如何使用迭代器显示值?

4

4 回答 4

3

地图模板需要两个参数map<key, value>。密钥必须有某种方式将自己与其他密钥进行比较。map它使用<运算符,所以如果你用 a 键,你map<int,int>会遇到问题,因为没有<为任意地图定义。

尝试

map<int, map<int, int> > multimap; 
于 2012-04-19T16:19:05.953 回答
2

如果你想要一个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;
}
于 2012-04-19T16:36:10.393 回答
0

-首先,您的代码中没有多重地图 - 只是一个名为“多重地图”的地图。

-其次,结构

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;
}
于 2012-04-19T16:33:06.060 回答
0

在我看来,您混淆了地图和多地图,以及键和值。

如果您想要一个将键 '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)
于 2012-04-19T16:30:44.040 回答