我对图书馆的程序有疑问

I have a problem with a program for a library

我有一个 class 正在创建书籍,还有一个 class 用于将书籍保存在一个数组中,但我必须创建一个打印所有书籍的方法书名相同但年份不同,我碰巧这种代码失败是因为它复制了一些书,有没有办法防止这种情况发生在我身上?

void buscarNombre(string elemento){
            int i, j;
            int largo = 0;
            bool primeraVez = true;
            largo=contadorLibros();
            
            for(i=0;i<largo-1;i++){
                if (vec[i].getTitulo() == elemento){
                    for(j=i+1;j<largo;j++){
                        if (vec[j].getTitulo() == elemento){
                            if(vec[i].getAnnioImpresion() != vec[j].getAnnioImpresion()){
                                if(primeraVez == true){
                                    cout<<vec[i].toString()<<endl;
                                    primeraVez = false;
                                    
                                }
                                else{
                                    cout<<vec[j].toString()<<endl;
                                }
                                
                            }
                        }
                    }
                    primeraVez = true;
                }
            }
        }

我不懂你的母语,但如果我能正确理解代码:

假设您有三本书,书名相同但出版日期不同,我们称这些书为 A,B,C.

第一个循环遇到A,开始循环第二个循环。遇到B时设置primeraVez = false防止遇到C时再次打印;但是在第二个循环完成后,你重置了primeraVez = true,所以当你在第一个循环中遇到B时,你在第二个循环中遇到[=21时重新打印书名=]C.

您可以通过从列表中删除您打印的书籍或制作一个 std::set 您想要打印的书籍并在搜索完成后打印来防止这种情况。

是否打印同名同年的书籍?以及为什么在 if 条件下打印标题可能 'cout' 在 else 条件内导致重复。