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

文字列の2つの等しいリストを読み取り、最初のリストの単語のうち2番目のリストにもある単語の数を単純に出力する必要があります。私に拡張された結果を与えていません、そして私は問題が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。順序が重要でない場合は、、setおよびfind関数を使用することをお勧めします。

于 2010-03-24T19:46:09.303 に答える
2

binary_searchベクトル要素が既に最低から最高にソートされていることを前提としています。彼らは?

于 2010-03-24T19:52:16.730 に答える
1

これを機能させるには、作成した with 関数を使用し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;
  }
}

このメソッドの宣言はこちらで確認できます。

于 2012-10-29T10:00:06.997 に答える