오답노트
[C++/STL] 순열 관련 함수 본문
- 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 |