std::string
(数十万エントリ)の巨大なSTLコンテナがあります。私は現時点でvector
を使用していますが、私は変更して嬉しいです。内容はアルファベット順にソートされ、アルファベットの小文字a-z とñ
で構成されています。注文したSTLコンテナ内の接頭辞で始まるすべての文字列(非ASCII文字以外)を検索します
const std::string& prefix
を受け取り、そのような接頭辞で始まる最初の要素と最後の要素を指す最初の要素を指す1組の反復子を返す関数を実装しようとしています。条件に一致する文字列がない場合は、2つの同一イテレータを返します。ベクトルが膨大であるため、検索に効率が必要なので、バイナリ検索のためにそれを使用したいと考えています。
私が探しているのはstd::lower_bound
だと思いますが、ñ
を扱うことができるstd::string
を比較する関数がありません。
UTF-8を使用していますか?ベクタで使用するのと同じエンコーディングを検索接頭辞文字列に使用する限り、問題はないはずです。速度については、ラムダに接頭辞の長さを取り込み、 'std :: string :: compare'の適切なオーバーロードを呼び出すことができます。 – paddy
'lower_bound()'に渡すカスタム比較関数を書くことができますが、 'ñ'はASCIIではないので、実行する比較はcharset/localeを考慮する必要があります。 'std :: string'は' char'値だけを知っていて、charset/localeの概念を持たないので、手動で扱う必要があります。 'ñ'は異なるcharsetの異なる' char'値になることがあり、いくつかの文字セットには全く存在しません。 –