일종의 정렬
종류 (first_pointer, first_pointer + N,
CMP) 기본 오름차순
하강, 자기 쓰기 기능 CMP를 사용하려면
CMP BOOL (A의 INT, INT B)
{
리턴은 <B // 대신 돌아 가면 승순> 내림차순 B이었다
}
예를 들면 :
방법 A : 비교 함수 정의 (가장 일반적인)
// 경우 : 어레이 배열
INT의 A [100]
BOOL CMP1 (A INT, INT의 B) // int 형 배열 데이터
{
복귀 A> B // 하강 배열
//은 <B를 리턴 // 기본 오름차순
}
정렬 (A, A + 100를 CMP1);
@ 사례 2 : 배열 구조체
학생 스투 [100]
BOOL CMP2 (학생 A, B 학생)
{
창 a.id> b.id; // 학생 내림차순 번호 순서
// 창 a.id <b.id // 오름차순 학생 번호
}
정렬 (스투 스튜 + 100, CMP2)
참고 : 비교 방법은 구조 또는 클래스 정의 내에 배치 될 수있다.
// 값으로 분류 달성하기 위해 매핑
개의 키 값의 값을 포함하는지도의지도 키 값에 따라 분류되어, 값이 값은 다음과 같이 분류하는 경우 다음
의 typedef 쌍 <문자열 INT> 쌍;
INT CMP ( 한 쌍의 X 및 CONST, Y 및 쌍 CONST)
{
창 x.second> y.second;
}
지도 <문자열 INT> m]
벡터 <쌍> VEC]
대 (MAP <wstring의, INT> :: = m 반복자 문헌 [Curr. 문헌 [Curr ++) 상기 ()는 문헌 [Curr ;! m.end = () 시작
{
(curr-> SECOND curr- make_pair (> 우선))를 vec.push_back
}
정렬 (vec.begin () vec.end () , CMP)
쌍으로 구성된 새로운 구조의 키 값 맵은 벡터의 메모리 맵 쌍 유형의 모든 내용이, 값 vecor 값에 따라 정렬. 순차적으로 출력 키 :
참고 : 당신이 그런 종류의 경우,이 CMP 정의는 클래스 외부에 배치해야한다, 또는 정적 멤버 함수로 정의 된 비 멤버 함수로 (권장) 또는 다른 (같이) 컴파일러는 잘못됩니다.
올바른 표현 :
정적 클래스의 멤버 함수로서 정의 CMP
사용법 #include <iostream>
#INCLUDE <알고리즘>
#INCLUDE <문자열>
네임 스페이스를 사용하여 표준;
() 주요 int로
{
문자열의;
의 getline (CIN은, S);
종류 (s.begin (), s.end ());
이렇게
{
COUT << S << ENDL 단계;
} 동안 (next_permutation (s.begin () s.end ()));
0을 반환;
}
注: next_permutation原型:
#INCLUDE <알고리즘>
BOOL next_permutation (반복자 시작 반복자 단부)
주 : 완전 필요성은 사용 전에 어레이의 오름차순으로 배열. (이 다음 전체 배열을 추구하는 현재의 배열을 기반으로하기 때문에)