-1

我有下面的矢量

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

4 回答 4

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;
}
于 2013-08-24T14:43:03.767 回答
0

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

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

那么 *iter 应该指向您要查找的记录?如果这是错误的,我是菜鸟,很抱歉

于 2013-08-24T12:57:58.830 回答
0

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

旁白:您的代码看起来像 C 加减,而不是 C++。摆脱那个 typedef,把它char[14]改成std::string.

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

于 2013-08-24T13:04:34.357 回答
0

引用 :

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

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 文件中 #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 数组。

于 2013-08-24T14:24:10.573 回答