使用迭代器通过比较对向量进行排序

Using an iterator to sort a vector by comparison

本文关键字:向量 排序 比较 迭代器      更新时间:2023-10-16

我创建了一个名为相册的类的向量,当我向向量中添加新相册时,我首先尝试将相册标题与向量的第一个索引进行比较,并按字母顺序排序。这是我的代码:

vector<album> cd;                //declared in main
void add_cd_vector(vector<album>& cd)
{
    string name;
    int barcode;

    cout << "Enter the album name: ";
    cin >> name;
    cout << "Enter the barcode: ";
    cin >> barcode;
    album newCD(name, barcode);       //constructor function for class
    if(cd.size() == 0) //no vector created yet
    {
         cd.push_back(newcd);
    }
    else{
         vector<album>::iterator it;
         for(it = cd.begin(); it!=cd.end(); it++)
         {
              if(name < it.get_name())    //getter function for name in  class
              {
                    cd.insert(it, newCD);     //should insert into the vector
              }
          }
    }

我的问题要么在if语句中,要么在其中的命令中,我不确定正确的语法。

我认为您想将插入逻辑更改为:

for(it = cd.begin(); it!=cd.end(); it++)
{
    if (name < it->get_name())
    {
        break;
    }
}
cd.insert(it, newCD);

这样,即使元素大于最后一个元素,也会插入该元素。请注意,使用此逻辑,您不需要检查向量是否为空,因此代码更简单。