Возникла проблема с бинарным поиском с участием векторов (C++)
Я пытаюсь найти значение с помощью бинарного поиска, но постоянно получаю сообщение об ошибке: нет совпадения с 'operator ==' в '(& itemNumb) -> std:: vector<_Tp, _Alloc>:: operator [], std:: allocator>> (((std:: vector>:: size_type) middle)) == значение '| Я уже разобрал вектор, я совершенно не уверен в том, что вызвало ошибку.
void Search(vector<string>& itemNumb, vector<string>& itemName, vector<double>& itemCost, vector<int>& itemQuant)
{
int left, right, value, middle;
left = 0;
right = itemNumb.size();
cout << "Please enter desired item number." << endl;
cin >> value;
while (left <= right)
{
middle = ((left + right) / 2);
if (itemNumb[middle] == value)
{
cout << "Item is " << itemName[middle] << endl;
cout << "Price is " << itemCost[middle] << endl;
cout << "Amount in stock is " << itemQuant[middle] << endl;
}
else if (itemNumb[middle] > value)
{
right = (middle - 1);
}
else
{
left = (middle + 1);
}
}
if (intNumb[middle] != value)
{
cout << "Item number not found." << endl;
}
}
Каждый оператор if дает одну и ту же ошибку, просто с оператором == или оператором> по порядку. Любая помощь вообще была бы замечательной, я нахожусь в конце своего ума, пытающегося понять это, довольно плохо знакомый с C++.
1 ответ
Вектор itemNumb
является вектором строк, в то время как value
является целым числом Вы не можете напрямую сравнивать строку с целым числом. Сначала вы должны преобразовать целое число в string
,
В C++11 вы могли бы использовать std::to_string()
и делать:
if (itemNumb[middle] == std::to_string(value))
// ^^^^^^^^^^^^^^^^^^^^^
Возможной альтернативой является использование std::ostringstream
, как показано в этом ответе.