我使用的自定义Set类与STL Set类
基本相同问题在于我以某种方式错误地实现它并使用默认比较函数而不是我定义的比较。
Set<Lexicon::CorrectionT> Lexicon::suggestCorrections(Lexicon::MatchesT & matchSet)
{
Set<CorrectionT> suggest(compareCorr); //ordered Set
suggestCorrectionsHelper(root, suggest, 0, matchSet.testWord, 0, matchSet.testTime);
return suggest;
}
int compareCorr(Lexicon::CorrectionT a, Lexicon::CorrectionT b)
{
if (a.editDistance < b.editDistance)
return -1;
else if (a.editDistance == b.editDistance)
return 0;
else
return 1;
}
struct CorrectionT {
int editDistance; //stackItems
string suggestedWord; //stackItems
};
一些研究:
我有19个C2784错误都与某些形式的“错误C2784:'bool std :: operator ==(const std :: _ Tree&lt; _Traits&gt;&amp;,const std :: _ Tree&lt; _Traits&gt;&amp;)'有关:无法推断'const std :: _ Tree&lt; _Traits&gt;&amp;'的模板参数来自'Lexicon :: CorrectionT'
并引用此代码
template <typename Type>
int OperatorCmp(Type one, Type two) {
if (one == two) return 0;
if (one < two) return -1;
return 1;
}
我的问题:您如何建议更正此问题?
尝试更改默认定义类型:
#include "lexicon.h"
//template <typename Type>
int OperatorCmp(Lexicon::CorrectionT one, Lexicon::CorrectionT two) {
if (one.editDistance == two.editDistance) return 0;
if (one.editDistance < two.editDistance) return -1;
return 1;
}
#endif
答案 0 :(得分:1)
STL set
的比较函数必须是Strict Weak Ordering,因此该类不与STL set
相同。
该错误表示正在使用默认的OperatorCmp
,我不知道为什么,但您可以通过为{{1}定义operator<
和operator==
来使默认值正常工作输入。