我有下面的矢量
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
我们为Available
,0
为Unavailable
。
我需要什么?我需要我的函数来查找名为Peugeot
的记录,并将类型更改为我的NewType
参数的值。
答案 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::string
,std::map<std::string, CarRecord>
看起来非常适合您的问题。地图的索引是汽车的名称,而不是某个整数。
答案 2 :(得分:0)
引用:
要查找特定记录,您可以使用
之类的内容std::vector<CarRecord>::iterator iter;
iter = std::find(FileRecords.begin(), FileRecords.end(), recordToFind);
从“fiveoak”结尾引用。
fiveoak说的是对的,您可以使用std :: find查找如上所示的特定记录。
使用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数组。
答案 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;
}