【发布时间】:2013-02-14 02:18:49
【问题描述】:
我在使用 std::list::sort 函数时遇到了很多麻烦,它在大多数情况下都可以工作,但是每隔一段时间它就会抛出一个断言“无效运算符
该函数的目的是根据希尔系统将元素列表排序为公式字符串,即。碳第一,氢第二,所有其他按字母顺序排列。 FormulaStruct 仅表示完整公式中的单个元素和数量。
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 是当公式中有碳时的条件,因为希尔系统要求如果公式中有碳,那么接下来是氢,否则一切都是按字母顺序排列的,包括氢,这在我的代码的另一部分中规定。
【问题讨论】:
-
符号相等时返回
true。这是为什么呢? -
@jogojapan 是对的,想象两个对象
a和b具有相同的符号:您的操作员同时给出a < b和b < a... -
您的 m_bHasCarbon 条件不清楚,您能描述一下您要做什么吗?
-
抛出一个无效的 '
标签: c++ list stl strict-weak-ordering