#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中。 你能告诉我为什么吗?
答案 0 :(得分:10)
因为字符串没有在向量中排序。首先使用std::sort
对它们进行排序。
答案 1 :(得分:8)
集合必须在执行binary_search
之前进行排序。是吗?
答案 2 :(得分:6)
答案 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。