[英]C++ STL set custom comparator
我在通過自定義比較器排序一組字符串時遇到問題。 我會根據字符串的長度排序。
struct CompareLenght
{
bool operator()(const std::string s1, const std::string s2) const
{return (s1.size()>s2.size());}
}
class SearchEngine
{
private:
void Associate(const std::vector<std::string> &Files);
public:
SearchEngine(const std::vector<std::string> &Files);
void Search(const std::string &frase, std::set<std::string> *S);
};
class FindWord
{
private:
std::set<std::string> Parole_Univoche;
public:
FindWord(const std::string &str);
inline void Get_Word(std::set<std::string> *Set_Of_Word);
};
inline void FindWord::Get_Word(std::set<std::string> *Set_Of_Word)
{
*Set_Of_Word = Parole_Univoche;
}
當我嘗試這樣做時,問題就來了:
void SearchEngine::Search(const std::string &phrase, std::set<std::string> *S)
{
FindWord F(phrase);
std::set<std::string,CompareLenght> Keyword;
F.Get_Word(&Keyword);
// some code
}
錯誤是:
In file included from main.cc:15:0:
SearchEngineNew.cc: In member function ‘void SearchEngine::Search(const string&, std::set<std::basic_string<char> >*)’:
SearchEngineNew.cc:69:33: error: no matching function for call to ‘FindWord::Get_Word(std::set<std::basic_string<char>, cmp>*)’
F.Get_Word(&Keyword);
^
SearchEngineNew.cc:69:33: note: candidate is:
In file included from main.cc:14:0:
FindWord.cc:39:13: note: void FindWord::Get_Word(std::set<std::basic_string<char> >*)
inline void FindWord::Get_Word(std::set<std::string> *Set_Of_Word)
^
FindWord.cc:39:13: note: no known conversion for argument 1 from ‘std::set<std::basic_string<char>, cmp>*’ to ‘std::set<std::basic_string<char> >*’
如何解決這個問題? 非常感謝你!
您正在傳遞&KeyWord類型:
std::set<std::string,CompareLenght> Keyword;
參數類型的方法:
std::set<std::string>*
這些類型的區別在於Get_Word參數類型中缺少CompareLenght。 您可以將此Mathod作為模板方法來接受任何類型的KeyWord,或添加重載方法。 或者只是將Get_Word更改為:
inline void Get_Word(std::set<std::string,CompareLenght> *Set_Of_Word);
^^^^^^^^^^^^^
但是您隨后必須將此更改傳播到Parole_Univoche或手動復制Set_Of_Word,如下所示:
typedef std::set<std::string> set_type;
for ( set_type::const_iterator citr = Parole_Univoche.begin(); citr != Parole_Univoche.end(); ++citr ) {
Set_Of_Word->insert(*citr);
}
您定義為
std::set<std::string,CompareLenght> Keyword;
那是關鍵字的類型是std::set<std::string,CompareLenght>
但是函數Get_Word的參數類型是std::set<std::string> *
inline void FindWord::Get_Word(std::set<std::string> *Set_Of_Word)
{ *Set_Of_Word = Parole_Univoche;}
按以下方式更改
inline void FindWord::Get_Word(std::set<std::string, CompareLenght> *Set_Of_Word)
{ *Set_Of_Word = Parole_Univoche;}
而且似乎該功能應定義為
inline void FindWord::Get_Word(std::set<std::string, CompareLenght> *Set_Of_Word)
{ Parole_Univoche = *Set_Of_Word; }
因為作業沒有任何意義
*Set_Of_Word = Parole_Univoche;
也是數據成員
std::set<std::string> Parole_Univoche;
也應定義為
std::set<std::string, CompareLenght> Parole_Univoche;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.