c ++:multimap显示非预期的输出

时间:2012-12-08 07:58:56

标签: c++ stl

multimap显示非预期的输出。我的预期输出是     一个     公元前     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;
     }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

enter image description here

你可以看到mmap内存空间中的元素存储。

mmap.insert(pair&gt;('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>()));
希望能帮到你。