오답노트

[C++/STL] 순열 관련 함수 본문

C,C++/STL

[C++/STL] 순열 관련 함수

권멋져 2022. 5. 7. 19:26

- next_permutation

  • 오름차순 정렬된 컨테이너를 받는다
  • 입력 컨테이너의 다음 순열을 입력 컨테이너에 입력한다.
  • 다음 순열이 존재하면 true, 존재하지 않으면 false
#include <iostream>     // std::cout
#include <algorithm>    // std::next_permutation, std::sort

using namespace std;

int main()
{
    vector<int> vnt = { 1,2,3 };
    while (next_permutation(vnt.begin(), vnt.end())) 
    {
        for (auto& i : vnt)
            cout << i << "  ";
            cout << '\n';
    }
        // 1 3 2
        // 2 1 3
        // 2 3 1
        // 3 1 2
        // 3 2 1
}

 

- prev_permutation

  • 내림차순 정렬된 컨테이너를 받는다
  • 입력 컨테이너의 이전 순열을 입력 컨테이너에 입력한다.
  • 이전 순열이 존재하면 true, 존재하지 않으면 false
#include <iostream>     
#include <algorithm>    

using namespace std;

int main()
{
    vector<int> vnt = { 3,2,1 };
    while (std::prev_permutation(vnt.begin(), vnt.end())) 
    {
        for (auto& i : vnt)
            cout << i << "  ";
            cout << '\n';
    }
        // 3 1 2
        // 2 3 1
        // 2 1 3
        // 1 3 2
        // 1 2 3
}

 

- rotate

  • first, midle, last 를 인자로 받는다.
  • midle을 기준으로 요소의 위치를 바꾼다.
#include <iostream>     
#include <algorithm>    

using namespace std;

int main()
{
    vector<int> nvt = { 1,2,3,4,5,6,7,8,9,10 };
    std::rotate(nvt.begin(), nvt.begin() + 1, nvt.end());
    // 2,3,4,5,6,7,8,9,10,1

    std::rotate(nvt.begin(), nvt.begin() + 2, nvt.end());
    // 4,5,6,7,8,9,10,1,2,3

    std::rotate(nvt.rbegin(), nvt.rbegin() + 2, nvt.rend());
    // 2,3,4,5,6,7,8,9,10,1

    std::rotate(nvt.rbegin(), nvt.rbegin() + 1, nvt.rend());
    // 1,2,3,4,5,6,7,8,9,10
}

 

'C,C++ > STL' 카테고리의 다른 글

[해시] BOJ 13417번 수강신청  (0) 2022.06.10
[C++/STL] 자료구조 - 해시  (0) 2022.06.10
[C++/STL] 이분탐색(이진탐색) 관련 함수  (0) 2022.06.10