c++ - 列表插入STL

标签 c++ list stl insert

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

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

但我必须对它进行排序。运算符 < 得到很好的实现:

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

最佳答案

你的 itList迭代器指的是不同的容器。 itList指向 _mapDirectors[director].second 的成员但您正试图将其用作 llista 的插入点.

我认为问题是你想要 llista成为对映射列表的引用,但您正在制作它的拷贝。

试试下面的代码(我没有测试过,但它应该能让你明白)。请注意,它需要一个对映射列表的引用。也无需测试空 map ,或执行显式 find对于导演 - 你可以简单地引用 _mapDirectors[director].second如果 map 中不存在空列表,则会自动创建空列表。

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)在那种情况下。

关于c++ - 列表插入STL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813258/

相关文章:

c++ - 使用使用 `extern "C"` 的 C 库与 native C++ 库相比有什么缺点?

python - 如何将包含字母的列表插入到另一个列表列列表中?

C++ 优先队列实现对图边进行排序

android - iOS App 中的文本渲染

c++ - error C3861 : '_T' : identifier not found , 无法将main函数参数作为函数参数传入

c++ - C++ 标准库必须用 C++ 实现吗?

python - 使用索引列表对数组进行切片

生成字符串列表及其子字符串的排列的算法

c++ - 我的 iOS Metal 计算内核是否存在编译器错误,或者我遗漏了什么?

c++ - 表格的STL容器