2014-01-11 145 views
0

我正在嘗試編寫二維矢量上二進制搜索程序的代碼。我試過代碼。但我不明白我得到的錯誤是什麼。我在下面給出了我的代碼和錯誤。二維搜索二維矢量

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>&}’ 

回答

0

我想你的運算符重載的爭論應該顛倒過來。

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

當編譯器正在尋找的矢量<字符串>作爲第一個參數

> /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])’ 
+0

改變功能定義後,我得到下面的錯誤。 /usr/include/c++/4.6/bits/stl_algo.h:在函數'bool std :: binary_search(_FIter,_FIter,const _Tp&,_Compare)[with _FIter = __gnu_cxx :: __ normal_iterator > *,std :: vector >>>,_Tp = char [9],_Compare = BINARY_ON]': /usr/include/c++/4.6/bits/ stl_algo.h:2714:56:錯誤:無法匹配調用'(BINARY_ON)(const char [9],std :: vector >&)' –

+0

在C++硬編碼字符串中, 。因此const char [9]。在將「01051996」傳遞給binary_search函數之前,將其轉換爲類型字符串。您也可以將函數定義更改爲使用const char [],但可能需要對函數進行代碼更改。 –