列表插入STL

时间:2015-11-19 19:59:08

标签: c++ list stl insert

我不明白为什么我的代码没有插入列表。

但是如果我通过执行push_back更改我使用insert的行,则元素将插入到列表中。谢谢

但我必须对它进行排序。操作员<实施得很好:

void  Movies::afegirPeliculaDirector(string director,string title,int year){
      list<actorDirectorMovie> llista;
      actorDirectorMovie dir(title,year);
      int total=_mapDirectors.count(director);
      if (total>0){
             map<string,list<actorDirectorMovie> >::iterator                   
             it=_mapDirectors.find(director);
             llista=(*it).second;
             list<actorDirectorMovie>::iterator itList=(*it).second.begin();
             while(itList!=(*it).second.end() and (*itList) < dir){
                itList++;
             }
             if (itList==(*it).second.end()) llista.push_back(dir);
             else {
                 cout << llista.size() << endl;
                 llista.insert(itList,dir);//->>>>>>>>>>>>>>>>>>>> IT DOESN'T INSERT, WHY?
                 cout << llista.size() << endl;
             }
             it->second=llista;
     }
     else {
       llista.push_back(dir);
      _mapDirectors.insert(make_pair(director,llista));
  }
  directorMovies(director);
}

1 个答案:

答案 0 :(得分:1)

您的itList迭代器引用了另一个容器。 itList指向_mapDirectors[director].second的成员,但您尝试将其用作llista的插入点。

我认为问题在于您希望llista成为对映射列表的引用,而是您正在复制它。

尝试以下代码(我没有测试过,但它应该给你一个想法)。请注意,映射列表需要引用。也没有必要测试空地图,或者为导演做一个明确的find - 你可以简单地引用_mapDirectors[director].second,如果它不在地图中,则会自动创建空列表。 / p>

void  Movies::afegirPeliculaDirector(string director,string title,int year)
{
    // get a reference to the director's list
    list<actorDirectorMovie>& llista = _mapDirectors[director];
    actorDirectorMovie dir(title,year);

    list<actorDirectorMovie>::iterator itList=llista.begin();
     while(itList!=llista.end() and (*itList) < dir){
        itList++;
     }
     if (itList==llista.end()) llista.push_back(dir);
     else {
         cout << llista.size() << endl;
         llista.insert(itList,dir);
         cout << llista.size() << endl;
     }
}

您还可以考虑更改使用list将每个导演的电影存储到set,因为这具有为您自动排序的属性。在这种情况下,整个函数将减少到_mapDirectors[director].insert(dir)