Как найти целое число во вложенном классе с помощью функции binary_search
STL? Можно ли выполнить бинарный поиск по вектору vITems
для поиска идентификатора класса продукта? В настоящее время я должен заполнить массив std::vector<Product> vProd
внутри класса Order
, чтобы использовать функцию binary_search
.
Я провел много исследований по этому вопросу, но мне не удалось решить эту проблему.
#include <iostream>
#include <algorithm>
#include <vector>
class Product {
public:
int Id;
std::string Name;
Product(int idProd, const std::string &nameProd) : Id(idProd), Name(nameProd) {}
Product(int idProd) : Id(idProd) {} // Required for lambda function to work on binary_search function
};
class Item {
public:
Product Prod;
int Number;
Item(Product &prod, int numProd) : Prod(prod), Number(numProd) {}
};
class Order{
private:
std::vector<Item> vItems;
public:
bool consultProd(int idProd) const {
std::vector<Product> vProd;
size_t total = vItems.size();
for(size_t i = 0; i < total; i++)
vProd.push_back(vItems[i].Prod);
bool yesId = binary_search( vProd.begin(), vProd.end(), idProd,
[]( const Product &p1, const Product &p2)
{
return p1.Id < p2.Id;
} );
return yesId;
}
void setItem(Item &it){
vItems.push_back(it);
}
};
int main()
{
//----------------------------------------------------------------
Product p1(1, "aaa"), p2(2, "bbb"), p3(3, "ccc"), p4(4, "ddd");
Item it1(p1, 1), it2(p2, 3), it3(p3, 3), it4(p4, 7);
Order ord;
ord.setItem(it1);
ord.setItem(it2);
ord.setItem(it3);
ord.setItem(it4);
//----------------------------------------------------------------
if( !ord.consultProd(2) )
ord.setItem(it2);
else
std::cout << "Warning: Product already included in the order.\n";
system("pause");
return 0;
}