0

二分探索プログラムのコードを 2D ベクトルに書こうとしています。コードを試してみました。しかし、私が得たエラーが何であるか理解できません。以下にコードとエラーを示します。

class BINARY_ON
{
    public:
        explicit BINARY_ON(int column,string fCol) :m_column(column),fColType(fCol) {}

        bool operator()(const string& lhs,const vector<string>& rhs)
        {
               if(fColType=="number")
                      return atoi(lhs.c_str()) < atoi(rhs[m_column].c_str());                   
               else if(fColType=="date")
                      return PPCheckTwoDate(lhs, rhs[m_column])<0;
               else
                      return lhs < rhs[m_column];   
        }
    private:
        int m_column;
        string fColType;
};

int main ()
{
    vector<vector<string>> table_data;

    // Vector Data Insert

    BINARY_ON compare_column(4,"date");

    if (std::binary_search (table_data.begin(), table_data.end(), "01051996", compare_column))
    std::cout << "found!\n"; else std::cout << "not found.\n";
}

以下のエラーが発生しました。

>  /usr/include/c++/4.6/bits/stl_algo.h:2416:4: error: no match for call
>  to ‘(PPBINARY_ON) (std::vector<std::basic_string<char> >&, const char
>  [9])’ 
> 
> note: bool PPBINARY_ON::operator()(const string&, const
>  std::vector<std::basic_string<char> >&) 
> 
> note: no known conversion for
>  argument 1 from ‘std::vector<std::basic_string<char> >’ to ‘const
>  string& {aka const std::basic_string<char>&}’
4

1 に答える 1

0

演算子のオーバーロードの引数は逆にする必要があると思います。

bool operator()(const vector<string>& rhs, const string& lhs)

コンパイラが vector< string > を最初の引数として探しているため

>  /usr/include/c++/4.6/bits/stl_algo.h:2416:4: error: no match for call
>  to ‘(PPBINARY_ON) (std::vector<std::basic_string<char> >&, const char
>  [9])’ 
于 2014-01-11T08:05:46.080 に答える