web-dev-qa-db-ja.com

std :: stackをソートするC ++関数はありますか?

std::stack私のコードで、それをソートする必要があります。これを行うための組み込み関数はありますか?なので std::stack 持っていない std::end。使ってもいいですか std::sortまたは、元のスタックをソートするために補助スタックを使用するという同じ古いアプローチに行かなければなりませんか?

4
Max
template <class T, class U, class Compare>
void sort_stack(std::stack<T,U> &stack, Compare comp)
{
    std::vector<T> tmp_container;
    tmp_container.reserve(stack.size());
    while(!stack.empty())
    {
        tmp_container.Push_back(std::move(stack.top()));
        stack.pop();
    }
    std::sort(tmp_container.begin(), tmp_container.end(), comp);
    for(auto it:tmp_container)
    {
        stack.Push(std::move(it));
    }
}
template <class T, class U>
void sort_stack(std::stack<T,U> &stack)
{
    sort_stack(stack, std::less<T>());
}

私の知る限り、スタックをインプレースでソートする方法はありません。ただし、1つの回避策は、追加のスペースを使用することです。

0
yao99