基本的にSTLSetクラスと同じカスタム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
};
いくつかの研究:
「エラーC2784:'bool std :: operator ==(const std :: _ Tree <_Traits>&、const std :: _ Tree <_Traits>&)」の形式に関連する19個のC2784エラーがあります:テンプレートを推測できませんでした'Lexicon::CorrectionT'からの'conststd :: _ Tree <_Traits>&'の引数
このコードを参照する
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