binary_search 不适用于向量<string>
Posted
技术标签:
【中文标题】binary_search 不适用于向量<string>【英文标题】:binary_search not working for a vector<string> 【发布时间】:2010-03-24 19:43:20 【问题描述】:#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 中。 你能告诉我为什么吗?
【问题讨论】:
输入是:第一个列表:大家好,他们很丑第二个列表:他们猪青蛙很丑 那么猜测输入没有排序的人是正确的。但是,如果您将输入作为您问题的一部分提供给我们,我们就不必猜测了。在这里提出问题时,请始终提供尽可能多的信息 - 我们中的一些人讨厌猜测。 请注意,binary_search
返回项目是否在容器中的结果。要查找项目的位置,请使用 lower_bound
或 upper_bound
。
【参考方案1】:
因为字符串未在向量中排序。首先使用std::sort
对它们进行排序。
【讨论】:
+1。请注意,如果您只查看一次,您可能应该使用 std::find 而不是 std::sort 和 std::binary_search。【参考方案2】:在执行binary_search
之前必须对集合进行排序。是吗?
【讨论】:
【参考方案3】:您的输入可能未排序。 binary_sort
要求您进行排序,您可以使用 sort
进行排序。如果顺序无关紧要,更好的方法可能是使用set
和find
函数
【讨论】:
【参考方案4】:binary_search
假定您的向量元素已经排序,从最低到最高。是吗?
【讨论】:
【参考方案5】:要使其工作,您必须使用 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;
你可以看到这个方法的声明here。
【讨论】:
以上是关于binary_search 不适用于向量<string>的主要内容,如果未能解决你的问题,请参考以下文章
Lower_bound 不适用于具有 3 个元素的向量的最后一个元素