0

multimap 显示意外输出。我的预期输出是 a b,c d

但它显示的是 c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c, c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c, c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c, c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c,c, d

    #include <iostream>
    #include <vector>
    #include <map>

    using namespace std;

    int main ()
    {
       multimap<char,vector<char> > mmap; //multimap 

       mmap.insert (pair<char,vector<char> >('a',vector<char>('b','c'))); //insert to multimap
       mmap.insert (pair<char,vector<char> >('d',vector<char>()));

       vector<char>::iterator veciter; 
       multimap<char,vector<char> >::iterator mapiter;

       for ( mapiter = mmap.begin(); mapiter != mmap.end(); ++mapiter) 
       {
          cout << mapiter->first << endl;

          for (veciter = mapiter->second.begin(); veciter != mapiter->second.end(); ++veciter)
          {
              cout << *veciter << ',';
          }
          cout<<endl;
        }

       return 0;
     }
4

2 回答 2

0

构造函数vector<char>('b','c')创建一个包含 98 个 'a' 值的向量,因为 'b' 的整数值是 98,并且您正在调用构造函数explicit vector( size_t size, const _Tp& initial ) ...。如果您支持 C++ 标准,您可以使用初始化器列表来更正您的代码。代码如下所示:mmap.insert (pair<char,vector<char> >('a',vector<char>{'b','c'}));

于 2012-12-08T08:02:13.363 回答
0

在此处输入图像描述

您可以查看 mmap 内存空间中存储的元素。

mmap.insert (pair >('a',vector('b','c'))) , 创建一个有 98 个 'a' 值的向量

你可以这样使用:

mmap.insert (pair<char,vector<char> >('a',vector<char>())); 

mmap.insert (pair<char,vector<char> >('b',vector<char>())); 

mmap.insert (pair<char,vector<char> >('c',vector<char>())); 

mmap.insert (pair<char,vector<char> >('d',vector<char>()));

希望能帮到你。

于 2012-12-08T08:32:31.207 回答