如何检查队列是否使用stl排序

时间:2018-06-26 15:50:31

标签: c++ sorting stl queue

我想在这个问题上获得您的帮助,我需要编写一个C ++函数,该函数输入队列作为参数,并检查队列中的内容是否按排序顺序排列(以使得front元素最小)。 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;
}

1 个答案:

答案 0 :(得分:2)

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

因此,比较将需要复制queue或依次pop并比较queue的元素,然后push将它们放回到{{1} }。对于这个示例,我选择简单地复制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是该工作的错误工具。考虑使用priority_queue或仅使用vector