2017-11-26 16 views
1

以下の機能は、次の順序でカーベクトルのすべての要素を表示します。比較要素++

車:#1


メイク:BMW

モデル:X6

価格(£):50000

車:#2


メイク:ホンダ

モデル:ジャズ

価格(£):13000

車:#3


メイク:マツダ

モデル: 3

価格(£):20000

など

私はすべての車の外に安価である車を見つけるために価格に基づくベクターですべての車を比較したいと思います。同じベクター内の特定のフィールドを比較する比較可能なメソッドはありますか?

これはサンプルコードです:すべて、その後、あなたはそれをこの方法を行う場合

class Car { 
public: 
    int price; 
    std::string make; 
    std::string model; 
    int index; 
    bool operator<(Car const& otherCar) const; 
} 

bool Car::operator<(Car const& otherCar) const 
{ 
    return price < otherCar.price; 
} 

:あなたは常に価格でソートされます

void displayCars(vector<Car> carVec) 
    { 
     if (!carVec.empty()) 
    { 
    cout << "Current Inventory:\n"; 

    for (unsigned int count = 0; count < carVec.size(); count++) 
    {                
     cout << "\t\t\tCar: #" << (count + 1) << endl   
      << "\t\t___________________________\n\n" 
      << "Make: " << carVec[count].getMake() << endl 
      << "Model: " << carVec[count].getModel() << endl 
      << "Price (£): " << carVec[count].getPrice() << endl 
      << endl << endl; 
    } 




} 

} 
+1

いいえ、あなたは1を記述する必要があります。 –

+0

'void displayCars(ベクトル carVec)'は、ベクトルのコピーを作成します。 –

答えて

2

使用のstd :: min_element:

auto min = std::min_element(begin(carVec), end(carVec), 
    [](const auto& lh, const auto& rh) { 
     return lh.getPrice() < rh.getPrice(); 
}); 

std::cout << "Cheapest is: " << min->getModel() << "\n"; 
+0

これは機能しました。ありがとうございました。 – user2023

0

、その後、あなたがこれを行うことができますベクトル上の標準ソートアルゴリズムは自動的に価格を使用してソートされます。そうしないと、あなたはソートする各事に別々の機能を定義することができます。

bool IsCheaper(Car const& Car1, Car const& Car2) 
{ 
    return Car1.price < Car2.price 
} 
+0

あなたの提案もうまくいった。ありがとうございました。上記のmanni66で一番安い車だけを印刷する方法はありますか?私は値を印刷するために印刷方法を書いたが、最も安い車ではなくすべてを印刷する。 forループ:for(符号なしint i = 0; i user2023

+0

オペレータが実装されていると、auto min = std :: min_element(begin(carVec)、end(carVec));を実行できるだけです。ラムダ式は渡されず、演算子<はデフォルトで – idontseethepoint

+0

となります。完璧。ご協力いただき誠にありがとうございます。 – user2023

関連する問題