字典Setting键排序:同类别按索引排序,其余按描述排序
解决方案
你的现有比较器逻辑存在问题:只要两个元素的mCategory相同就按mIndex排序,这会导致同一类别下的唯一类别元素(mIndex=-INF)被强制排在非唯一类别元素前面,哪怕它的描述字典序更大,违背了“整体按描述排序”的核心需求。
正确的逻辑应该是:仅当两个元素都属于非唯一类别组(即mIndex≠-INF且mCategory相同)时,才按mIndex排序;其他所有情况(包括同类别但其中一个是唯一类别、不同类别)都按描述的不区分大小写排序。
修改后的代码如下:
bool operator()(const myStruct& rLeft, const myStruct& rRight) const { bool leftIsNonUnique = (rLeft.mIndex != -INF); bool rightIsNonUnique = (rRight.mIndex != -INF); // 同一非唯一类别组内,按mIndex升序排序 if (leftIsNonUnique && rightIsNonUnique && rLeft.mCategory == rRight.mCategory) { return rLeft.mIndex < rRight.mIndex; } // 其他情况按描述不区分大小写排序 else { return rLeft.mDescription.CompareNoCase(rRight.mDescription) < 0; } }
这样既保证了整体排序符合描述的字典序,又避免了非唯一类别组内出现Book 10排在Book 1前面的问题;同时,同一类别下的唯一元素和非唯一元素也会按照描述的正确顺序排列。
内容的提问来源于stack exchange,提问作者Arannya Monzur
相关产品推荐
相关产品推荐

