テキストファイル内で使われている文字を数える 続き

昨日の続き。
ワイド文字版。

#include <iostream>
#include <map>

#include <boost/range/algorithm/for_each.hpp>
#include <boost/range/adaptor/sliced.hpp>
#include <boost/range/as_array.hpp>

#include <pstade/oven/file_range.hpp>

int
main(){
    namespace oven = pstade::oven;
    namespace adaptors = boost::adaptors;
    
    auto frange = oven::file_range<wchar_t>("空にとける虹と君の声.txt");
    std::map<wchar_t, int>    count;
    BOOST_FOREACH(wchar_t key, frange|adaptors::sliced(1, boost::distance(frange))){
        count[key]++;
    }

    // 結果の出力
    std::wcout.imbue(std::locale("japanese"));
    boost::for_each(count, [](std::pair<wchar_t, int> c){
        std::wcout << c.first << ":" << c.second << std::endl;
    });

    return 0;
}

読み込んでくるファイルは、Unicode 形式で保存。
ファイルの先頭2バイトは識別文字になってるみたいなので1つずらして読み込んでいる。
やはりワイド文字の扱いはややこしい。
adaptors::sliced の第二引数がない場合は、
boost::distance に置き換えて欲しいと思ったり思わなかったり。


各文字のカウントの処理は、boost::count を使うよりこっちの方がスマートな気がする。
改行コード辺りも読み飛ばしたいな。
range は割といろんな事が出来るので使ってて楽しい。


あと boost::range でも pstade::oven でもいいからの日本語版リファレンスが欲しい。
英語版も読めなくはないが、欲しい機能を探すのに時間がかかる。
一通りの機能を試せば一番いいんだけども・・・さて、どうするか。
使った機能の一覧でもどっかに書くかな。
[追記]
作りました。

[boost/pstade]
ver 1.44.0 / ver 1.04.3