-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;

第三个模板参数用于比较器。你的代码没有任何意义。拥有三种类型的多图也没有任何意义。它从键映射到值,第三种类型应该是什么意思?

于 2013-06-03T14:05:38.163 回答
5

这是错误的:

multimap < u_int32_t, u_int32_t,string> lines;

的模板参数multimap列在en.cppreference.com

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

第一个模板参数是key,第二个是存储的类型,第三个是比较器。

您已指定std::string为比较器。显然这不会做你想要的,我有点惊讶这甚至可以编译。 basic_string确实有operator<- 这一定是它编译的原因。

我认为你对multimap真正的东西感到困惑。 multimap不是可以用来在键和 mopre 不同类型的值之一之间映射的东西。 multimapmap它在单个键和值之间映射的相同之处在于,不同之处在于multimap您可以将多个值映射到单个键。

于 2013-06-03T14:08:41.320 回答