binary_search不适用于vector <string> </string>

时间:2010-03-24 19:43:20

标签: c++ string vector binary-search

#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;
}

它读取两个相等的字符串列表,并且应该打印出第一个列表中有多少单词也可以在第二个列表中找到,简单。 不给我经过考验的结果,我认为问题出在binary_search中。 你能告诉我为什么吗?

5 个答案:

答案 0 :(得分:10)

因为字符串没有在向量中排序。首先使用std::sort对它们进行排序。

答案 1 :(得分:8)

集合必须在执行binary_search之前进行排序。是吗?

答案 2 :(得分:6)

可能您的输入未排序。 binary_sort要求您进行排序,您可以使用sort进行排序。如果顺序无关紧要,更好的方法可能是使用setfind函数

答案 3 :(得分:2)

binary_search假设您的向量元素已经排序,从最低到最高。是吗?

答案 4 :(得分:1)

要使其正常工作,您必须使用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;
  }
}

您可以看到此方法的声明here