gpt4 book ai didi

c++ - 升序排序,c++,带 vector

转载 作者:太空狗 更新时间:2023-10-29 21:33:27 25 4
gpt4 key购买 nike

我正在尝试为 std::vector 创建一个排序函数,但我遇到了负 values 的问题。我不想使用函数 vector::sort。队列是一个 vector 。

我的输入:

1, -2, -241, 332, 2667, -2667, 266217, 2667, 13, -22, -41, 2332

输出:

266217, 2667, 2667, 2332, 332, 13, 1, -2. -241, -2667, -22, -41

基本上一切正常,然后由于我不清楚的原因而崩溃。

函数:

void PriorityQueue::Push(double value)
{
std::vector<double>::iterator pr;

if (Queue.empty())
{
Queue.push_back(value);
}

else if (!Queue.empty())
{
for (pr = Queue.begin(); pr != Queue.end(); pr++)
{
if (value > *pr || value == *pr)
{
Queue.insert(pr, value);
break;
}

else if (value < 0)
{
if (value > *pr || value == *pr)
{
Queue.insert(pr, value);
break;
}

else if (value < *pr)
{
Queue.push_back(value);
break;
}
}
}
}
}

最佳答案

  1. 很难理解此方法中的理想顺序。但是我会努力的。你用

    Queue.insert(pr, value);

所以我假设在 value>=*pr 的情况下 pr 应该在 value 之前。这意味着降序,从最大值到最小值。

  1. 你想要降序。然后,当前一个大于或等于并且当前元素小于值时,您需要位置。所以跳过所有直到找到这个位置然后插入。

    void PriorityQueue::Push(double value) {
    std::vector<double>::iterator pr;
    if (Queue.empty()) {
    Queue.push_back(value);
    return;
    }
    for (pr = Queue.begin(); pr != Queue.end(); pr++) {
    if (value < *pr)
    continue;
    Queue.insert(pr,value);
    break;
    }
    }

对于升序 - 跳过所有直到第一个更大然后插入:

    void PriorityQueue::Push(double value) {
std::vector<double>::iterator pr;
if (Queue.empty()) {
Queue.push_back(value);
return;
}
for (pr = Queue.begin(); pr != Queue.end(); pr++) {
if (value >= *pr)
continue;
Queue.insert(pr,value);
break;
}
}
  1. 您不需要检查“if (value<0)” - 我认为您在这一步犯了逻辑错误。你也不需要检查

    if (!Queue.empty())

    之后的else语句

    if (Queue.empty())

    检查太多,会导致很多错误...

关于c++ - 升序排序,c++,带 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51017063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com