collate 클래스
문자열 내 문자의 순서 지정 및 그룹화, 문자열 해시 간의 비교를 제어하는 로캘 패싯으로 사용할 수 있는 개체를 설명하는 클래스 템플릿입니다.
구문
template <class CharType>
class collate : public locale::facet;
매개 변수
CharType
문자를 인코딩하기 위해 프로그램 내 사용하는 형식
설명
모든 로캘 패싯과 마찬가지로, 고정 개체 ID에는 초기값 0이 저장되어 있습니다. 저장된 값에 액세스를 처음 시도하면 id
에 고유한 양수 값이 저장됩니다. 일부 언어에서는 문자가 그룹화되고 단일 문자로 취급되며, 다른 언어에서는 개별 문자가 두 문자인 것처럼 취급됩니다. collate 클래스에서 제공하는 데이터 정렬 서비스는 이러한 경우를 정렬하는 방법을 제공합니다.
생성자
생성자 | Description |
---|---|
collate | 문자열 정렬 규칙을 처리할 로캘 패싯으로 사용할 collate 클래스 개체의 생성자입니다. |
Typedef
형식 이름 | 설명 |
---|---|
char_type | CharType 형식의 문자를 설명하는 형식입니다. |
string_type | basic_string 형식의 문자가 포함된 CharType 형식의 문자열을 설명하는 형식입니다. |
멤버 함수
멤버 함수 | 설명 |
---|---|
compare | 패싯별 규칙에 따라 두 문자 시퀀스의 같음 또는 동등성을 비교합니다. |
do_compare | 패싯별 규칙에 따라 두 문자 시퀀스를 비교하기 위해 가상 함수를 호출하여 두 문자 시퀀스의 같음 또는 동등성을 비교합니다. |
do_hash | 패싯별 규칙에 따라 시퀀스의 해시 값을 확인하기 위해 가상 함수를 호출합니다. |
do_transform | 가상 함수를 호출하여 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다. |
hash | 패싯별 규칙에 따라 시퀀스의 해시 값을 확인합니다. |
변환 | 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다. |
요구 사항
헤더:<로캘>
네임스페이스: std
collate::char_type
CharType
형식의 문자를 설명하는 형식입니다.
typedef CharType char_type;
설명
이 형식은 템플릿 매개 변수 CharType
의 동의어입니다.
collate::collate
문자열 정렬 규칙을 처리하는 데 로캘 패싯으로 사용할 collate 클래스 개체의 생성자입니다.
public:
explicit collate(
size_t _Refs = 0);
protected:
collate(
const char* _Locname,
size_t _Refs = 0);
매개 변수
_심판
개체에 대한 메모리 관리의 유형을 지정하는 데 사용하는 정수 값입니다.
_Locname
로캘 이름입니다.
설명
_Refs 매개 변수 및 해당 중요도에 사용할 수 있는 값은 다음과 같습니다.
0: 개체를 포함하는 로캘에 의해 개체의 수명이 관리됩니다.
1: 개체의 수명을 수동으로 관리해야 합니다.
> 1: 이러한 값은 정의되지 않습니다.
생성자는 로캘::facet(_Refs
)를 사용하여 기본 개체를 초기화합니다.
collate::compare
패싯별 규칙에 따라 두 문자 시퀀스의 같음 또는 동등성을 비교합니다.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
매개 변수
first1
비교할 첫 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last1
비교할 첫 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
first2
비교할 두 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last2
비교할 두 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
Return Value
멤버 함수는 다음을 반환합니다.
첫 번째 시퀀스가 두 번째 시퀀스보다 작은 것으로 비교되는 경우, -1
두 번째 시퀀스가 첫 번째 시퀀스보다 작은 것으로 비교되는 경우, +1
시퀀스가 같은 경우, 0
설명
시퀀스 내에서 가장 앞의 서로 다른 쌍에 더 작은 요소가 있는 경우 또는 서로 다른 쌍이 없지만 첫 번째 시퀀스가 더 짧은 경우 첫 번째 시퀀스는 더 작은 것으로 비교됩니다.
멤버 함수는 do_compare(first1
, last1
, first2
, last2
)를 반환합니다.
예시
// collate_compare.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main() {
locale loc ( "German_germany" );
_TCHAR * s1 = _T("Das ist wei\x00dfzz."); // \x00df is the German sharp-s, it comes before z in the German alphabet
_TCHAR * s2 = _T("Das ist weizzz.");
int result1 = use_facet<collate<_TCHAR> > ( loc ).
compare ( s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << result1 << endl;
locale loc2 ( "C" );
int result2 = use_facet<collate<_TCHAR> > ( loc2 ).
compare (s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << result2 << endl;
}
collate::d o_compare
패싯별 규칙에 따라 두 문자 시퀀스를 비교하기 위해 가상 함수를 호출하여 두 문자 시퀀스의 같음 또는 동등성을 비교합니다.
virtual int do_compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
매개 변수
first1
비교할 첫 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last1
비교할 첫 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
first2
비교할 두 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last2
비교할 두 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
Return Value
멤버 함수는 다음을 반환합니다.
첫 번째 시퀀스가 두 번째 시퀀스보다 작은 것으로 비교되는 경우, -1
두 번째 시퀀스가 첫 번째 시퀀스보다 작은 것으로 비교되는 경우, +1
시퀀스가 같은 경우, 0
설명
보호된 가상 멤버 함수는 [* first1, Last1)*의 시퀀스와 [ first2, last2)의 시퀀스를 비교합니다. 형식CharType
의 해당 요소 쌍 간에 적용하여 operator<
값을 비교합니다. 시퀀스 내에서 가장 앞의 서로 다른 쌍에 더 작은 요소가 있는 경우 또는 서로 다른 쌍이 없지만 첫 번째 시퀀스가 더 짧은 경우 첫 번째 시퀀스는 더 작은 것으로 비교됩니다.
예시
do_compare
를 호출하는 collate::compare에 대한 예제를 참조하세요.
collate::d o_hash
패싯별 규칙에 따라 시퀀스의 해시 값을 확인하기 위해 가상 함수를 호출합니다.
virtual long do_hash(const CharType* first, const CharType* last) const;
매개 변수
first
결정할 값이 있는 시퀀스의 첫 번째 문자에 대한 포인터입니다.
last
결정할 값이 있는 시퀀스의 마지막 문자에 대한 포인터입니다.
Return Value
시퀀스에 대한 형식 long
의 해시 값입니다.
설명
해시 값은 목록의 배열에 의사(pseudo) 임의로 시퀀스를 분산하는 경우 등에 유용할 수 있습니다.
예시
do_hash
를 호출하는 hash에 대한 예제를 참조하세요.
collate::d o_transform
가상 함수를 호출하여 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
매개 변수
first
변환할 시퀀스의 첫 번째 문자에 대한 포인터입니다.
last
변환할 시퀀스의 마지막 문자에 대한 포인터입니다.
Return Value
변환된 문자 시퀀스인 문자열입니다.
설명
보호된 가상 멤버 함수는 제어된 시퀀스가 시퀀스 [first
, last
)의 복사본인 string_type 클래스의 개체를 반환합니다. collate<CharType>에서 파생된 클래스가 do_compare 재정의하는 경우 일치하도록 재정 do_transform
의해야 합니다. collate::compare
에 전달된 경우 두 개의 변형된 문자열은 파생된 클래스에서 비교할 변환되지 않은 문자열을 전달하여 얻을 수 있는 것과 동일한 결과를 생성해야 합니다.
예시
do_transform
을 호출하는 transform에 대한 예제를 참조하세요.
collate::hash
패싯별 규칙에 따라 시퀀스의 해시 값을 확인합니다.
long hash(const CharType* first, const CharType* last) const;
매개 변수
first
결정할 값이 있는 시퀀스의 첫 번째 문자에 대한 포인터입니다.
last
결정할 값이 있는 시퀀스의 마지막 문자에 대한 포인터입니다.
Return Value
시퀀스에 대한 형식 long
의 해시 값입니다.
설명
멤버 함수는 do_hash(first
, last
)를 반환합니다.
해시 값은 목록의 배열에 의사(pseudo) 임의로 시퀀스를 분산하는 경우 등에 유용할 수 있습니다.
예시
// collate_hash.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main( )
{
locale loc ( "German_germany" );
_TCHAR * s1 = _T("\x00dfzz abc."); // \x00df is the German sharp-s (looks like beta), it comes before z in the alphabet
_TCHAR * s2 = _T("zzz abc."); // \x00df is the German sharp-s (looks like beta), it comes before z in the alphabet
long r1 = use_facet< collate<_TCHAR> > ( loc ).
hash (s1, &s1[_tcslen( s1 )-1 ]);
long r2 = use_facet< collate<_TCHAR> > ( loc ).
hash (s2, &s2[_tcslen( s2 )-1 ] );
cout << r1 << " " << r2 << endl;
}
541187293 551279837
collate::string_type
basic_string
형식의 문자가 포함된 CharType
형식의 문자열을 설명하는 형식입니다.
typedef basic_string<CharType> string_type;
설명
이 형식은 개체가 소스 시퀀스의 복사본을 저장할 수 있는 클래스 템플릿 basic_string 특수화를 설명합니다.
예시
string_type
의 선언 및 사용 방법의 예는 transform을 참조하세요.
collate::transform
문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다.
string_type transform(const CharType* first, const CharType* last) const;
매개 변수
first
변환할 시퀀스의 첫 번째 문자에 대한 포인터입니다.
last
변환할 시퀀스의 마지막 문자에 대한 포인터입니다.
Return Value
변환된 문자 시퀀스가 포함된 문자열입니다.
설명
멤버 함수는 do_transform(first
, last
)를 반환합니다.
예시
// collate_transform.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <tchar.h>
using namespace std;
int main( )
{
locale loc ( "German_Germany" );
_TCHAR* s1 = _T("\x00dfzz abc.");
// \x00df is the German sharp-s (looks like beta),
// it comes before z in the alphabet
_TCHAR* s2 = _T("zzz abc.");
collate<_TCHAR>::string_type r1; // OK for typedef
r1 = use_facet< collate<_TCHAR> > ( loc ).
transform (s1, &s1[_tcslen( s1 )-1 ]);
cout << r1 << endl;
basic_string<_TCHAR> r2 = use_facet< collate<_TCHAR> > ( loc ).
transform (s2, &s2[_tcslen( s2 )-1 ]);
cout << r2 << endl;
int result1 = use_facet<collate<_TCHAR> > ( loc ).compare
(s1, &s1[_tcslen( s1 )-1 ], s2, &s2[_tcslen( s2 )-1 ] );
cout << _tcscmp(r1.c_str( ),r2.c_str( )) << result1
<< _tcscmp(s1,s2) <<endl;
}
-1-11