首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图用特定模式对列表进行排序时遇到困难

试图用特定模式对列表进行排序时遇到困难
EN

Stack Overflow用户
提问于 2017-12-01 14:43:41
回答 1查看 44关注 0票数 0

我正在进行编程练习,编写一个要插入列表中的函数时遇到了一些困难:我有以下代码:

代码语言:javascript
运行
复制
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);
    }

}

我希望插入排序,在第一,按频率(从最高到最低)和在领带,按名称(从最低至最高字母排序)。但我肯定我做错了什么。希望你能帮我,抱歉英语不好。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-01 15:18:18

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

您希望找到频率较小或频率相同且名称不少于的第一个元素:

代码语言:javascript
运行
复制
while (it != listObjects.end() 
  && ((*it)->getFrequency() > obj->getFrequency() 
     || ((*it)->getFrequency() == obj->getFrequency() 
         && (*it)->getName() < obj->getName()))) {
    it++;
}
listObjects.insert(it, obj);

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

代码语言:javascript
运行
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47595810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档