试图用特定模式对列表进行排序的麻烦

时间:2017-12-01 14:43:42

标签: c++

我正在进行编程练习,并且在编写要在列表中排序的函数时遇到了一些麻烦: 我有以下代码:

void Node::insertNew(Object* obj) {
    list<Object*>::iterator iter = listObjects.begin();
    while (it != listObjects.end() && (*it)->getFrecuency() > obj->getFrecuency()) {
        it++;
    }
    if (it != listObjects.end() && (*it)->getFrecuency() != obj->getFrequency()) {
        while (it != listObjects.end() && (*it)->getName() < obj->getName()) {
            it++;
        }
        listObjects.insert(it, obj);
    }

}

我希望插入排序,首先是Frecuency(从最高到最低),如果是平局,按名称排序(按字母顺序从最低到最高)。 但我确信我做错了什么。 希望你能帮助我,抱歉英语不好。 感谢。

1 个答案:

答案 0 :(得分:1)

你的第二个循环说“如果频率不同,开始比较名称(忽略频率),直到你找到插入点”。

您想要找到频率较小的第一个元素具有相同的频率且名称不小于:

while (it != listObjects.end() 
  && ((*it)->getFrequency() > obj->getFrequency() 
     || ((*it)->getFrequency() == obj->getFrequency() 
         && (*it)->getName() < obj->getName()))) {
    it++;
}
listObjects.insert(it, obj);

重载<运算符使其更方便。

bool operator< (const Object& lhs, const Object& rhs)
{
    return lhs.getFrequency() > rhs.getFrequency()
        || (lhs.getFrequency() == rhs.getFrequency() && lhs.getName() < rhs.getName());
}

// ...
while (it != listObjects.end() && **it < *obj)
    it++;
listObjects.insert(it, obj);