更新STL矢量中的数据

Updating data in STL vector

本文关键字:数据 STL 更新      更新时间:2023-10-16

我有下面的向量

vector<CarRecord> FileRecords;

CarRecord是这样一个结构:

typedef struct 
{   
    char carName[14];
    eStatus carStatus;
    eCarType carType;
} CarRecord;

我有一个使用这个向量的类,我遇到了一些问题:我不知道如何编写Update(CarRecord *Rec, eStatus NewStatus);函数。

我在这里发现了一个问题,答案是这样的:

vector[index] = newValue;

但我不知道如何找到我的具体物品。

编辑:

我的矢量目前看起来像这样,例如:

Name    Type Status
Nissan  4    1
Peugeot 3    1

在状态下,1表示Available0表示Unavailable

我需要什么?我需要我的函数来查找名为Peugeot的记录,并将类型更改为NewType参数的值。

要查找特定记录,可以使用类似的东西吗

std::vector<CarRecord>::iterator iter;
iter = std::find(FileRecords.begin(), FileRecords.end(), recordToFind);

那么*iter应该指向你想要查找的唱片?如果这是错误的,我很抱歉

为什么在这里使用矢量?这看起来更适合地图。

旁白:您的代码看起来像C加或减,而不是C++。去掉typedef,将char[14]改为std::string

char[14]std::stringstd::map<std::string, CarRecord>看起来非常适合您的问题。地图的索引是汽车的名称,而不是某个整数。

报价:

要找到特定的记录,你可以使用类似的东西吗

std::vector<CarRecord>::iterator iter;
iter = std::find(FileRecords.begin(), FileRecords.end(), recordToFind);

结尾引用"fiveoak"。

  1. fiveoak所说的是对的,您可以使用std::find来查找特定的记录,如上所示。

  2. 要使用std::find,还需要定义自己的相等运算符,即覆盖相等运算符

在头文件中将您的CarRecord更改为这样

    struct CarRecord 
    {   
        char carName[14];
        eStatus carStatus;
        eCarType carType;
        bool operator ==(CarRecord const& other) const;
    } ;

//将其放入另一个cpp文件中#包括"your_car_record_header.h"#包括

    bool CarRecord::operator ==(CarRecord const& other);
   { 
        return std::strcmp(carName, other.carName) == 0;
   }

我也同意David Hammen所说的,最好使用std::string而不是char数组。

我认为这将解决您的问题

bool Update(char *car, eCarType newType)
{
auto it = std::find_if(FileRecords.begin(),
                  FileRecords.end(),
                  [=](const CarRecord& c ){
                  return strstr(c.carName,car) != '';
                  }
                  );
if(it != FileRecords.end())
   {
      it->carType = newType;  
      return true;
   }
  return false;
}