2

boost::bind、boost::lambda ライブラリと、それらを STL アルゴリズムで使用する方法を学習しようとしています。int キーでソートされた int-string ペアのベクトルがあるとします。次に、ベクトルをソートしたまま新しいペアを挿入する場所は、次のように見つけることができます。

std::vector<std::pair<int, string> > entries;
...
int k = ...;

// Let's ignore std::lower_bound return value for now
std::lower_bound (entries.begin(), entries.end(), k, 
                  boost::bind (&std::pair<int, string>::first, _1) < k)

operator<ここで、関数オブジェクト (std::less<int>この例の型)に置き換えたいと思います。

std::less<int> comparator;

上記のコードを変更して機能させるにはどうすればよいですか? 私はただすることはできません

std::lower_bound (entries.begin(), entries.end(), k, 
                  comparator (boost::bind (&std::pair<int, string>::first, _1), k))

std::less<int>::operator()の戻り値の型が何であれ、受け入れないためですboost::bind。ここで何が欠けていますか?ティア

4

1 に答える 1

3

あなたが欠けているのは別のものですbind(そして のテンプレートパラメータpair):

std::lower_bound(entries.begin(), entries.end(), k, 
                 boost::bind(comparator,
                             boost::bind(&std::pair<int, string>::first, _1),
                             k))

Boost.Bind は、 の戻り値の型を処理する方法を知っている演算子のオーバーロードを提供するため、元のコードのより小さい演算子でそれを行う必要はありませんboost::bind

于 2009-11-25T06:32:25.827 に答える