2013-05-17 1 views
1

Я пытаюсь найти значение через двоичный поиск, но я все время получаю ошибку об ошибке: нет соответствия для 'operator ==' in '(& itemNumb) -> std :: vector < _Tp, _Alloc> :: operator [], std :: allocator>> (((std :: vector> :: size_type) middle)) == value '| У меня уже есть отсортированный вектор, который полностью не уверен в том, что вызвало ошибку.Проблема с двоичным поиском с участием векторов (C++)

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++.

ответ

2

Вектор itemNumb - вектор строк, а value - целое число. Вы не можете напрямую сравнивать строку с целым числом. Сначала вам нужно преобразовать целое число в string.

В C++ 11, вы можете использовать std::to_string() и сделать:

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

Возможной альтернативой является использование std::ostringstream, как показано in this answer.

+0

Спасибо за быстрый ответ! Я попробовал то, что вы сказали, но потом он сказал, что to_string не является членом std. –

+0

@ ZacharyMcCloud: Возможно, ваша реализация стандартной библиотеки не полностью совместима с C++ 11. Вы можете попробовать подход 'std :: ostringstream', тогда как в ответе я связал –

+0

ошибка: aggregate 'std :: ostringstream out' имеет неполный тип и не может быть определен | это то, что я получил, когда я попробовал этот метод. –