涉及向量的二进制搜索存在问题(C ++)

时间:2013-05-17 10:00:01

标签: c++ function vector binary-search

我试图通过二分搜索找到一个值,但我一直收到错误错误:'(& itemNumb)中的'operator =='不匹配 - > std :: vector< _Tp, _Alloc> :: 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&gt;”为了。任何帮助都会很精彩,我正在努力解决这个问题,这对c ++来说很新鲜。

1 个答案:

答案 0 :(得分:2)

向量itemNumb是字符串向量,而value是整数。您无法直接将字符串与整数进行比较。首先必须将整数转换为string

在C ++ 11中,您可以使用std::to_string()并执行:

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

可能的替代方法是使用std::ostringstream,如图in this answer所示。