名前空間
変種
操作

std::locale::operator()

提供: cppreference.com
< cpp‎ | locale‎ | locale
 
 
 
 
template< class CharT, class Traits, class Alloc >

bool operator()( const basic_string<CharT,Traits,Alloc>& s1,

                 const basic_string<CharT,Traits,Alloc>& s2) const;

このロケールの std::collate<charT> ファセットによって定義される辞書的比較ルールに従って2つの文字列引数 s1s2 を比較します。 この演算子は照合ファセットを持つ任意のロケールオブジェクトを標準のアルゴリズム (std::sort など) および順序付きコンテナ (std::set など) で二項述語として使用できるようにします。

目次

[編集] 引数

s1 - 比較する1つめの文字列
s2 - 比較する2つめの文字列

[編集] 戻り値

s1s2 より辞書順で小さい場合は true、そうでなければ false

[編集] 実装例

template<class CharT, class Traits, class Alloc >
bool operator()(const std::basic_string<CharT,Traits,Alloc>& s1,
                const std::basic_string<CharT,Traits,Alloc>& s2) const;
{
    return std::use_facet<std::collate<CharT>>(*this).compare(
                                         s1.data(), s1.data() + s1.size(),
                                         s2.data(), s2.data() + s2.size()   ) < 0;
}

[編集]

ロケールオブジェクトを比較子として使用することにより、文字列のベクタを非デフォルトロケールに従ってソートできます。

#include <locale>
#include <algorithm>
#include <vector>
#include <string>
#include <cassert>
 
int main()
{
    std::vector<std::wstring> v = {L"жил", L"был", L"кот"};
    std::sort(v.begin(), v.end(), std::locale("ru_RU.UTF8"));
    assert(v[0] == L"был");
    assert(v[1] == L"жил");
    assert(v[2] == L"кот");
}


[編集] 関連項目

文字列の辞書的な比較とハッシュ値の計算を定義します
(クラステンプレート) [edit]