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_boundupper_bound 【参考方案1】:

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

【讨论】:

+1。请注意,如果您只查看一次,您可能应该使用 std::find 而不是 std::sort 和 std::binary_search。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案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 个元素的向量的最后一个元素

INPUT / vector数组不适用于SendInput

`Vector.erase()` 不适用于类向量

Angular/Rxjs 管道异步不适用于 s-s-r?

支持向量机适用于训练集,但不适用于 R 中的测试集(使用 e1071)

为什么此代码不适用于大数?