首页 > 解决方案 > 如何检查队列是否使用stl排序

问题描述

我希望你能帮助我解决这个问题,我需要编写一个 C++ 函数,该函数输入一个队列作为参数并检查队列中的内容是否按排序顺序排列(使得前面的元素最小)。BOOLEAN应该相应地返回一个值。假设队列中没有重复元素。
我正在努力理解排序的概念,所以任何帮助都将不胜感激,这是我到目前为止所尝试的:

#include "stdafx.h"
#include <iostream>
#include <queue>
using namespace std; 

bool is_Sorted(queue<int> q) {
    int my_front = q.front();
    int my_back = q.back();
    if (my_front==my_back) {
        return true;
    }
    if (my_front+1>my_front) {
        return true;
    }
}

int main()
{
    queue <int> q;
    q.push(3);
    q.push(4);
    q.push(5);
    q.push(6);
    q.push(7);
    is_Sorted(q);
    return 0;
}

标签: c++sortingstlqueue

解决方案


因为 aqueue不提供您不能使用的迭代器:is_sorted

因此,比较需要复制queueor 顺序pop并比较 的元素queue,然后将push它们返回到queue. 我选择简单地复制queue这个例子:

template <typename T>
bool is_sorted(queue<T> q) {
    if(!empty(q)) {
        for(T i = q.front(); size(q) > 1U; i = q.front()) {
            q.pop();

            if(i > q.front()) {
                return false;
            }
        }
    }
    return true;
}

这个例子显然会产生复制成本,queue这显然是不可取的。之所以会产生此成本,是因为aqueue是该工作的错误工具。考虑priority_queue或只是一个vector.


推荐阅读