2004-09-01 Wed
* boost [p]
boost/numeric/ublas で sparse_matrix を扱う方法。
http://www-user.tu-chemnitz.de/~wgu/ublas/matrix_sparse_usage.html
2004-07-01 Thu
* cpp [p]
今日、はじめて、priority_queue の使い方がわかった。コンテナに格納
しながら、逐次に優先度順にソートしてくれるらしい。便利。
まず、priority_queue に入れたい要素オブジェクト(構造体)を定義する。
struct result {
double score;
unsigned int j;
unsigned int e;
friend bool operator<( const result& r1, const result& r2 )
{
return ( r1.score < r2.score );
};
friend std::ostream& operator<<( std::ostream& os, const result& r ) {
os << r.score << "\t" << r.j << "\t" << r.e;
return os;
};
};
struct result r1;
r1.score = 1.5;
r1.j = 1;
r1.e = 5;
struct result r2;
r2.score = 2.3;
r2.j = 2;
r2.e = 3;
ここで、operator< と operator<< を friend にしておく。
(奥義を理解していないので、ほとんど、おまじない)
で、 priority_queue の宣言。先ほどの struct result がコンテナの要
素オブジェクト。最後の引数の二項述語の終りに () が付かないのに注意。
よくわからんが、これで型を指定していることになるらしい。
(yet another おまじない。)
std::priority_queue< result, std::vector< result >, std::less< result > > pq;
pq.push( r1 );
pq.push( r2 );
while ( ! pq.empty() ) {
std::cout << pq.top() << std::endl;
pq.pop();
}
出力はこんな感じ。優先度が高い方から(score in a descending order)
で出力される。
2.3 2 3
1.5 1 5
ラティスのパスの N-best candidates を出力したいなと思っていたが、
priority_queue がわからず停滞していた。今回、ポイントが分かったの
で、自分でも実装できそう。
2004-04-02 Fri
* cpp [p]
operator>> と operator<< の override で挫折。
istream_iterator や ostream_iterator と copy を組み合わせると楽できる。
標準入力から vector 型の v へ整数を格納。
std::vector< int >::iterator iter = v.begin();
copy( std::istream_iterator< int >( std::cin ), std::istream_iterator< int >(), iter );
vector 型の v を標準出力で表示。
copy( v.begin(), v.end(), std::ostream_iterator< int >( std::cout, " " ) );
fstream も (i|o)stream_iterator と連結できるからお得。