c++ STL设置自定义比较器
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> >*’
如何解决这个问题?非常感谢!
您正在传递&关键字,其类型为:
std::set<std::string,CompareLenght> Keyword;
到参数类型为
的方法std::set<std::string>*
这些类型的区别在于Get_Word参数类型中缺少comparelength。您可以将此方法作为模板方法来接受任何类型的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);
}
您定义的set为
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;
相关文章:
- std::设置自定义比较器
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 没有默认构造函数作为模板参数的自定义比较器
- set_intersection使用自定义设置比较器
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 使用迭代器的自定义比较器函数
- Cython中带有自定义比较器的优先级队列
- gtest 期望无序元素与自定义比较器/匹配器一起使用
- 定义具有非标准签名的自定义映射比较器
- 为什么在类或结构中传递自定义比较器函数?
- 在priority_queue中使用默认容器但自定义比较器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- C++ priority_queue与自定义比较器并删除任何项目
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 通过函数指针对类内的 STL SET 使用自定义比较器
- C#二进制编写器自定义
- QList 作为 qt 设计器自定义小部件中的一个属性
- std::sort - 正在传递错误的比较器未定义的行为