c++ - 尝试使用特定模式对列表进行排序时遇到问题

标签 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);
    }

}

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

最佳答案

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

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

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

重载 <运算符(operator)使它更方便。

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);

关于c++ - 尝试使用特定模式对列表进行排序时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47595810/

相关文章:

c++ - 查看 std::unique_ptr 及其 nullptr_t 构造函数

c++ - 如何静态编译 Qt5 应用程序?

c++ - 异常时解锁互斥量

c++ - SQLITE:如何在 UPDATE 语句中使用 SELECT 语句更新表?

c++ - STL 集上的引用运算符 []

c++ - 如何使用抽象类为实例数组分配内存?

c++ - 在 VS 2012 中使用 mysql 连接器 C++

c++ - 在 GDB 中调试多线程服务器 - 查找每个线程的状态。执行时计数并停止

c++ - 为什么 std::move 与常量对象一起工作

c++ - 返回常量引用参数而不复制