更新STL向量中的数据

时间:2013-08-24 12:51:14

标签: c++ vector stl

我有下面的矢量

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我们为Available0Unavailable

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

4 个答案:

答案 0 :(得分:0)

要查找特定记录,您可以使用

之类的内容
std::vector<CarRecord>::iterator iter;
iter = std::find(FileRecords.begin(), FileRecords.end(), recordToFind);
那么* iter应该指向你想要找到的记录吗?我是个菜鸟,如果这是错的,那就很抱歉

答案 1 :(得分:0)

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

除此之外:您的代码看起来像C加或减,而不是C ++。摆脱该typedef,将char[14]更改为std::string

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

答案 2 :(得分:0)

引用:

要查找特定记录,您可以使用

之类的内容
std::vector<CarRecord>::iterator iter;
iter = std::find(FileRecords.begin(), FileRecords.end(), recordToFind);

从“fiveoak”结尾引用。

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

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

  3. 在头文件

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

    //把它放在另一个cpp文件中         #include“your_car_record_header.h”         #include

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

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

答案 3 :(得分:0)

我认为这将解决您的问题

bool Update(char *car, eCarType newType)
{

auto it = std::find_if(FileRecords.begin(),
                  FileRecords.end(),
                  [=](const CarRecord& c ){
                  return strstr(c.carName,car) != '\0';
                  }
                  );

if(it != FileRecords.end())
   {
      it->carType = newType;  
      return true;
   }

  return false;
}