문자열 내 문자의 순서 지정 및 그룹화, 문자열 해시 간의 비교를 제어하는 로캘 패싯으로 사용할 수 있는 개체를 설명하는 클래스 템플릿입니다.
구문
template <class CharType>
class collate : public locale::facet;
매개 변수
CharType
문자를 인코딩하기 위해 프로그램 내 사용하는 형식
설명
모든 로캘 패싯과 마찬가지로, 고정 개체 ID에는 초기값 0이 저장되어 있습니다. 저장된 값에 액세스를 처음 시도하면 id에 고유한 양수 값이 저장됩니다. 일부 언어에서는 문자가 그룹화되고 단일 문자로 취급되며, 다른 언어에서는 개별 문자가 두 문자인 것처럼 취급됩니다. collate 클래스에서 제공하는 데이터 정렬 서비스는 이러한 경우를 정렬하는 방법을 제공합니다.
생성자
| 생성자 | 설명 |
|---|---|
| 함께 합치다 | 문자열 정렬 규칙을 처리할 로캘 패싯으로 사용할 collate 클래스 개체의 생성자입니다. |
Typedef
| 형식 이름 | 설명 |
|---|---|
| char_type |
CharType 형식의 문자를 설명하는 형식입니다. |
| string_type |
basic_string 형식의 문자가 포함된 CharType 형식의 문자열을 설명하는 형식입니다. |
멤버 함수
| 멤버 함수 | 설명 |
|---|---|
| 비교하다 | 패싯별 규칙에 따라 두 문자 시퀀스의 같음 또는 동등성을 비교합니다. |
| do_compare | 패싯별 규칙에 따라 두 문자 시퀀스를 비교하기 위해 가상 함수를 호출하여 두 문자 시퀀스의 같음 또는 동등성을 비교합니다. |
| do_hash | 패싯별 규칙에 따라 시퀀스의 해시 값을 확인하기 위해 가상 함수를 호출합니다. |
| do_transform | 가상 함수를 호출하여 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다. |
| 해시 | 패싯별 규칙에 따라 시퀀스의 해시 값을 확인합니다. |
| 변환 | 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다. |
요구 사항
헤더:<로캘>
네임스페이스: 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: 이러한 값은 정의되지 않습니다.
생성자는 로캘:: 초기화합니다.
collate::compare
패싯별 규칙에 따라 두 문자 시퀀스의 같음 또는 동등성을 비교합니다.
int compare(const CharType* first1,
const CharType* last1,
const CharType* first2,
const CharType* last2) const;
매개 변수
first1
비교할 첫 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last1
비교할 첫 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
first2
비교할 두 번째 시퀀스의 첫 번째 요소에 대한 포인터입니다.
last2
비교할 두 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
반환 값
멤버 함수는 다음을 반환합니다.
첫 번째 시퀀스가 두 번째 시퀀스보다 작은 것으로 비교되는 경우, -1
두 번째 시퀀스가 첫 번째 시퀀스보다 작은 것으로 비교되는 경우, +1
시퀀스가 같은 경우, 0
설명
시퀀스 내에서 가장 앞의 서로 다른 쌍에 더 작은 요소가 있는 경우 또는 서로 다른 쌍이 없지만 첫 번째 시퀀스가 더 짧은 경우 첫 번째 시퀀스는 더 작은 것으로 비교됩니다.
멤버 함수는 do_compare(first1,, last1, first2last2)를 반환합니다.
예시
// 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
비교할 두 번째 시퀀스의 마지막 요소에 대한 포인터입니다.
반환 값
멤버 함수는 다음을 반환합니다.
첫 번째 시퀀스가 두 번째 시퀀스보다 작은 것으로 비교되는 경우, -1
두 번째 시퀀스가 첫 번째 시퀀스보다 작은 것으로 비교되는 경우, +1
시퀀스가 같은 경우, 0
설명
보호된 가상 멤버 함수는 [* first1, Last1)*의 시퀀스와 [ first2, last2)의 시퀀스를 비교합니다. 형식operator<의 해당 요소 쌍 간에 적용하여 CharType 값을 비교합니다. 시퀀스 내에서 가장 앞의 서로 다른 쌍에 더 작은 요소가 있는 경우 또는 서로 다른 쌍이 없지만 첫 번째 시퀀스가 더 짧은 경우 첫 번째 시퀀스는 더 작은 것으로 비교됩니다.
예시
를 호출하는 do_compare에 대한 예제를 참조하세요.
collate::d o_hash
패싯별 규칙에 따라 시퀀스의 해시 값을 확인하기 위해 가상 함수를 호출합니다.
virtual long do_hash(const CharType* first, const CharType* last) const;
매개 변수
첫 번째
결정할 값이 있는 시퀀스의 첫 번째 문자에 대한 포인터입니다.
마지막
결정할 값이 있는 시퀀스의 마지막 문자에 대한 포인터입니다.
반환 값
시퀀스에 대한 형식 long 의 해시 값입니다.
설명
해시 값은 목록의 배열에 의사(pseudo) 임의로 시퀀스를 분산하는 경우 등에 유용할 수 있습니다.
예시
collate::d o_transform
가상 함수를 호출하여 문자 시퀀스를 로캘에서 문자열로 변환하고 동일한 로캘에서 유사한 방식으로 변환된 다른 문자 시퀀스와 사전순으로 비교하는 데 사용합니다.
virtual string_type do_transform(const CharType* first, const CharType* last) const;
매개 변수
첫 번째
변환할 시퀀스의 첫 번째 문자에 대한 포인터입니다.
마지막
변환할 시퀀스의 마지막 문자에 대한 포인터입니다.
반환 값
변환된 문자 시퀀스인 문자열입니다.
설명
보호된 가상 멤버 함수는 제어된 시퀀스가 시퀀스 [, first)의 복사본인 last 클래스의 개체를 반환합니다. collate<CharType>에서 파생된 클래스가 do_compare 재정의하는 경우 일치하도록 재정 do_transform 의해야 합니다.
collate::compare에 전달된 경우 두 개의 변형된 문자열은 파생된 클래스에서 비교할 변환되지 않은 문자열을 전달하여 얻을 수 있는 것과 동일한 결과를 생성해야 합니다.
예시
을 호출하는 do_transform에 대한 예제를 참조하세요.
collate::hash
패싯별 규칙에 따라 시퀀스의 해시 값을 확인합니다.
long hash(const CharType* first, const CharType* last) const;
매개 변수
첫 번째
결정할 값이 있는 시퀀스의 첫 번째 문자에 대한 포인터입니다.
마지막
결정할 값이 있는 시퀀스의 마지막 문자에 대한 포인터입니다.
반환 값
시퀀스에 대한 형식 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;
매개 변수
첫 번째
변환할 시퀀스의 첫 번째 문자에 대한 포인터입니다.
마지막
변환할 시퀀스의 마지막 문자에 대한 포인터입니다.
반환 값
변환된 문자 시퀀스가 포함된 문자열입니다.
설명
예시
// 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