我正在进行编程练习,编写一个要插入列表中的函数时遇到了一些困难:我有以下代码:
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);
    }
}我希望插入排序,在第一,按频率(从最高到最低)和在领带,按名称(从最低至最高字母排序)。但我肯定我做错了什么。希望你能帮我,抱歉英语不好。谢谢。
发布于 2017-12-01 15:18:18
您的第二个循环说:“如果频率不同,开始比较名称(同时忽略频率),直到找到插入点”。
您希望找到频率较小或频率相同且名称不少于的第一个元素:
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);https://stackoverflow.com/questions/47595810
复制相似问题