std :: list :: sort関数の使用に多くの問題があります。ほとんどの場合は機能しますが、アサーション'invalidoperator<'がスローされることがあります。この問題を調べてみると、ソート関数が厳密な弱順序に従っていないことが原因であることがわかりましたが、コードを見ると、正しいように見えるので、なぜ厳密な弱い順序に従っていないのかわかりません。何が欠けているのでしょうか。ここ?
この関数の目的は、要素のリストを丘のシステムに基づいて数式文字列に並べ替えることです。カーボンファースト、水素セカンド、その他すべてアルファベット順。FormulaStructは、完全な数式の1つの要素と量を表すだけです。
struct FormulaStruct
{
FormulaStruct(const std::string & strSymbol, int nNum, bool bHasCarbon)
:
m_strSymbol(strSymbol),
m_nNum(nNum), m_bHasCarbon(bHasCarbon)
{
}
bool operator < (const FormulaStruct & rhs)
{
//If the symbols are equal
if(m_strSymbol == rhs.m_strSymbol)
return true;
if(m_bHasCarbon)
{
if(m_strSymbol == "C")
return true;
else
if(rhs.m_strSymbol == "H")
return false;
}
return m_strSymbol < rhs.m_strSymbol;
}
bool operator == (const FormulaStruct & rhs)
{
return m_strSymbol == rhs.m_strSymbol;
}
std::string m_strSymbol;
int m_nNum;
bool m_bHasCarbon;
};
list<FormulaStruct> FormulaList; //A list of FormulaStructs, assumed to be filled
FormulaList.sort();
編集 bHasCarbonは、式に炭素が含まれている場合の条件です。ヒルシステムでは、式に炭素が含まれている場合は水素よりも次の炭素が必要であり、そうでない場合は水素を含むすべてがアルファベット順であるため、コードの別のセクションで指定されます。