我想在这个问题上获得您的帮助,我需要编写一个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;
}
答案 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
。