как проверить, отсортирована ли очередь с использованием stl - PullRequest
0 голосов
/ 26 июня 2018

Мне нужна ваша помощь в этом вопросе, мне нужно написать функцию 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;
}

1 Ответ

0 голосов
/ 26 июня 2018

Поскольку queue не предоставляет итераторы, которые вы не можете использовать: is_sorted

Таким образом, для сравнения потребуется скопировать queue или последовательно 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, что явно нежелательно. Эта стоимость понесена, потому что a queue является неправильным инструментом для задания . Рассмотрим priority_queue или просто vector.

...