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

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

4

5 回答 5

11

因为字符串未在您的向量中排序。首先使用std::sort.

于 2010-03-24T19:46:29.463 回答
8

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

于 2010-03-24T19:45:28.093 回答
6

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

于 2010-03-24T19:46:09.303 回答
2

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

于 2010-03-24T19:52:16.730 回答
1

要使其工作,您必须使用binary_search创建的 with 函数来比较字符串。

例如,在您的情况下:

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

你可以在这里看到这个方法的声明。

于 2012-10-29T10:00:06.997 回答