将字符串映射到unsigned int到unsigned int的映射

时间:2015-04-13 20:29:24

标签: c++ dictionary stl stream

我试图将每个单词从cin映射到单词出现在它出现的行上的行号以及它在行上出现的次数。

我不确定我的循环是否有效。我想我对地图有一定的了解,但我不能100%确定这是否有效,我不能打印它进行测试,因为我还没弄明白我应该如何打印它。我的问题是,我的地图看起来不错吗?

int main ( int argc, char *argv[] )
{
  map<string, map<unsigned int, unsigned int> > table;

  unsigned int linenum = 1;
  string line;

  while ( getline(cin, line) != cin.eof()){
    istringstream iss(line);
    string word;
    while(iss  >> word){
      ++table[word][linenum];
    }
    linenum++;
 }

1 个答案:

答案 0 :(得分:1)

      while ( getline(cin, line) != cin.eof() ){
                                /*~~~~~~~~~~~~ Don't use this, 
                                               the comparison is incorrect */

要打印它,只需在地图上循环:

for(const auto& x:table)
{ 
    std::cout << x.first << ' ';
    for(const auto& y:x.second)
    {
     std::cout << y.first << ":" << y.second << ' ';
    }
    std::cout << std::endl;
}

请参阅here

对于C ++ 98,请使用:

    for(mIt x = table.begin();
        x != table.end();
        ++x )
{ 
    std::cout << x->first << ' ' ;
    for( It y = x->second.begin();
        y != x->second.end();
        ++y )
    {
     std::cout << y->first << ":" << y->second << ' ';
    }

    std::cout << std::endl;
}