涉及向量的二分搜索问题 (C++)

Posted

技术标签:

【中文标题】涉及向量的二分搜索问题 (C++)【英文标题】:Having an issue with a binary search involving vectors (C++) 【发布时间】:2013-05-17 10:00:00 【问题描述】:

我正在尝试通过二进制搜索查找值,但我不断收到错误错误:'(& 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++ 来说是很新的。

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

感谢您的快速回复!我试过你说的,但后来它说 to_string 不是 std 的成员。 @ZacharyMcCloud:也许您的标准库实现不完全符合 C++11。然后,您可以尝试基于std::ostringstream 的方法,如我链接的答案中所示 错误:聚合 'std::ostringstream out' 类型不完整,无法定义|是我尝试这种方法时得到的 @ZacharyMcCloud:你必须#include &lt;sstream&gt; @ZacharyMcCloud:好的,很高兴它有帮助。如果这解决了您的问题,请考虑将答案标记为已接受:)

以上是关于涉及向量的二分搜索问题 (C++)的主要内容,如果未能解决你的问题,请参考以下文章

如果我们有对向量,如何进行下界二分搜索

用于二分搜索的错误简单函数 (C++)

对向量使用二分搜索。

使用向量的二分搜索

如何使用二分搜索将元素插入已排序的向量中

在主题二分搜索下的 InterviewBit 问题中,在 C++ 中的旋转排序数组中搜索超过了时间限制