1

我试图通过二进制搜索找到一个值,但我不断收到错误错误:'(& itemNumb)->std::vector<_Tp, _Alloc>::operator 中的'operator==' 不匹配[], std::allocator > >(((std::vector >::size_type)middle)) == value'| 我已经对向量进行了排序,我完全不确定是什么导致了错误。

    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 语句都给出相同的错误,只是按顺序使用“operator==”或“operator>”。任何帮助都会很棒,我想尽办法解决这个问题,这对 C++ 来说是很新的。

4

1 回答 1

2

The vector itemNumb is a vector of strings, while value is an integer. You cannot compare directly a string to an integer. You first have to convert the integer into a string.

In C++11, you could use std::to_string() and do:

if (itemNumb[middle] == std::to_string(value))
//                      ^^^^^^^^^^^^^^^^^^^^^

A possible alternative is to use std::ostringstream, as shown in this answer.

于 2013-05-17T10:01:32.620 回答