binary_search 不适用于向量

发布于 2024-08-26 09:32:16 字数 758 浏览 5 评论 0原文

#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中。 你能告诉我为什么吗?

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

It reads two equal lists of strings and should print out how many of the words in the first list are also found in the second list, simple.
Not giving me the expexted results and i think the problem is in binary_search.
Can you tell me why ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情话已封尘 2024-09-02 09:32:16

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

Because the strings are not sorted in your vectors. Sort them first using std::sort.

债姬 2024-09-02 09:32:16

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

collection must be sorted before doing binary_search. is it?

养猫人 2024-09-02 09:32:16

可能您的输入未排序。 binary_sort 要求您进行排序,您可以使用 排序。如果顺序不重要,更好的方法可能是使用 setfind功能

Probably, your inputs are not sorted. binary_sort requires you to sort, which you can do with sort. If order doesn't matter, a better approach may be to use a set, and the find function

时光倒影 2024-09-02 09:32:16

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

binary_search assumes that your vectors elements are already sorted, lowest to highest. Are they?

油饼 2024-09-02 09:32:16

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

您可以看到此方法的声明 这里

To make it work, you must use the binary_search with function created to compare strings.

For example, in your case:

if((binary_search(decrypt.begin(), decrypt.end(), **temp.c_str(),compareFunction**)) == true) ++co;

You must declare compareFunction in this way:

bool compareFunction(string aux1,string aux2)
{
  if(strcmp(aux1.c_str(),aux2.c_str()) <0)
  {
    return true;
  }
  else
  {
    return false;
  }
}

you can see the declaration of this method here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文