Возникла проблема с бинарным поиском с участием векторов (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, как показано в этом ответе.

Другие вопросы по тегам