-1

そのような std::multimap を宣言できることがわかりました:

multimap < u_int32_t, u_int32_t,string> lines;

それを宣言できる場合は、挿入することもできるはずです

でもどうやって?

試してみstd::pairましたが、のようなものが必要なようstd::tripleです。

構造体を宣言し、その構造体にいくつかの値を保持できることはわかっています。しかし、私はむしろそれを直接行うことを好みます。しかも宣言できるから。

編集
私は重大な間違いを犯しましたが、マルチマップが間違っていることを本当に理解していたことがわかりました。
ここの人々の悲鳴と反対票により、私はドキュメントを読み直しました。今、私はそれを次のように使用します:

struct container {
u_int32_t  size_in_blocks;
string name_of_file;
};
            //size_of_file
multimap <  u_int32_t, container> lines;
       // first value is used as a key for sorting
       // second value is just a storage

container d;// initialization
lines.insert ( std::pair<u_int32_t,container>( total_size_bytes, d) );

皆さんありがとう!

4

2 に答える 2

5
template < class Key,                                     // multimap::key_type
           class T,                                       // multimap::mapped_type
           class Compare = less<Key>,                     // multimap::key_compare
           class Alloc = allocator<pair<const Key,T> >    // multimap::allocator_type
           > class multimap;

3 番目のテンプレート引数は比較用です。あなたのコードは意味がありません。3 つのタイプのマルチマップを持つことも意味がありません。キーから値にマッピングされますが、3 番目のタイプは何を意味するのでしょうか?

于 2013-06-03T14:05:38.163 に答える
5

これは間違っています:

multimap < u_int32_t, u_int32_t,string> lines;

のテンプレート パラメータはen.cppreference.commultimapにリストされています。

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class multimap;

最初のテンプレート パラメータはキー、2 番目は格納される型、3 番目はコンパレータです。

std::stringコンパレータとして指定しました。明らかに、これはあなたが望んでいることではありません。私はこれがコンパイルされることに少し驚いています。 basic_stringにはoperator<-- があり、それがコンパイルされる理由に違いありません。

何が本当なのか混乱していると思いますmultimapmultimapキーとさまざまな種類の値の 1 つとの間のマッピングに使用できるものではありません。 multimapは、 1 つのキーに複数の値をマップできるmap点を除いて、1 つのキーと値の間でマップするという点では同じです。multimap

于 2013-06-03T14:08:41.320 に答える