-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私たちはAvailable0のためにありUnavailableます。

何が必要ですか?名前を持つレコードを検索しPeugeot、タイプをNewTypeパラメーターの値に変更するには、関数が必要です。

4

4 に答える 4

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;
   }

また、char 配列の代わりに std::string を使用する方がよいという David Hammen の発言にも同意します。

于 2013-08-24T14:24:10.573 に答える
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 に答える