3

私はboost::poolを使って、私が扱っているもののより高速なアロケータであるかどうかを試していますが、boost::unordered_map:でそれを使用する方法がわかりません:

コード スニペットを次に示します。

unordered_map<int,int,boost::hash<int>, fast_pool_allocator<int>> theMap;   
theMap[1] = 2;

これが私が得るコンパイルエラーです:

エラー 3 エラー C2064: 用語は、2 つの引数を受け取る関数として評価されません C:\Program Files (x86)\boost\boost_1_38\boost\unordered\detail\hash_table_impl.hpp 2048

"theMap[1] = 2" のようにマップの使用をコメントアウトすると、コンパイル エラーはなくなります。

4

1 に答える 1

8

テンプレート パラメータが欠落しているようです。

template<typename Key, typename Mapped, typename Hash = boost::hash<Key>, 
     typename Pred = std::equal_to<Key>, 
     typename Alloc = std::allocator<std::pair<Key const, Mapped> > > 

4 番目のパラメーターは比較用の述語で、5 番目のパラメーターはアロケーターです。

unordered_map<int, int, boost::hash<int>,
     std::equal_to<int>, fast_pool_allocator<int> > theMap;

また、おそらく問題の原因ではありませんが、テンプレートのインスタンス化の最後にある 2 つの「>」を分離する必要があります。

于 2009-06-30T03:17:07.880 に答える