我正在进行编程练习,但在编写函数以在列表中插入排序时遇到了一些麻烦: 我有以下代码:
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/