4

私は次のように宣言unordered_mapします:

boost::unordered_map<std::array<char, 20>, t_torrent> torrent_ins;

次に、要素を挿入します(キーが存在しない場合、このマップは新しい要素の参照を返します)

t_torrent& torrent_in = torrent_ins[to_array<char,20>(in)];

しかし、私はエラーメッセージを受け取りました:

../src/Tracker/torrent_serialization.cpp:30:   instantiated from here/usr/local/include/boost/functional/hash/extensions.hpp:176: error: no matching function    for call to ‘hash_value(const std::array<char, 20ul>&)’

このエラーの説明を手伝ってもらえますか?本当にありがとう!

4

1 に答える 1

8

これは、「デフォルト」のハッシュ関数が存在しないためですstd::array<char, 20>。少なくとも、実装が提供するものはありません。std::array<char, 20>コードを機能させるには、ハッシュ関数を指定する必要があります。

std::unordered_mapでわかるように、:

template<
    class Key,
    class T,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator< std::pair<const Key, T> >
> class unordered_map;

カスタム ハッシュ関数を提供するHashには、typeを指定する必要があります。Key

于 2013-01-09T07:56:34.390 に答える