двоичный_поиск не работает для вектора <string> - PullRequest
2 голосов
/ 24 марта 2010
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
    string temp;
    vector<string> encrypt, decrypt;
    int i,n, co=0;
    cin >> n;
    for(i=0;i<n;i++)
    {
        cin >> temp;
            encrypt.push_back(temp);
    }
    for(i=0;i<n;i++)
    {
        cin >> temp;
        decrypt.push_back(temp);
    }
    for(i=0;i<n;i++)
    {
        temp = encrypt[i];
        if((binary_search(decrypt.begin(), decrypt.end(), temp)) == true) ++co;
    }
    cout << co << endl;
    return 0;
}

Он читает два одинаковых списка строк и должен распечатать, сколько слов из первого списка также найдено во втором списке, просто. Не давая мне ожидаемых результатов, и я думаю, что проблема в двоичном_поиске. Можете ли вы сказать мне, почему?

Ответы [ 5 ]

11 голосов
/ 24 марта 2010

Потому что строки не отсортированы в ваших векторах. Сначала отсортируйте их, используя std::sort.

8 голосов
/ 24 марта 2010

коллекция должна быть отсортирована перед выполнением binary_search. это?

6 голосов
/ 24 марта 2010

Возможно, ваши входы не отсортированы. binary_sort требует, чтобы вы отсортировали, что вы можете сделать с sort. Если порядок не имеет значения, лучше использовать set и find функцию

2 голосов
/ 24 марта 2010

binary_search предполагает, что ваши элементы векторов уже отсортированы, от низшего к высшему. Они?

1 голос
/ 29 октября 2012

Чтобы это работало, вы должны использовать binary_search с функцией, созданной для сравнения строк.

Например, в вашем случае:

if((binary_search(decrypt.begin(), decrypt.end(), **temp.c_str(),compareFunction**)) == true) ++co;

Вы должны объявить compareFunction таким образом:

bool compareFunction(string aux1,string aux2)
{
  if(strcmp(aux1.c_str(),aux2.c_str()) <0)
  {
    return true;
  }
  else
  {
    return false;
  }
}

вы можете увидеть объявление этого метода здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...