c++多映射插入两个以上的值

c++ multimap insert more than two values

本文关键字:两个 映射 插入 c++      更新时间:2023-10-16

我发现可以声明这样的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) );

谢谢大家!

这是错误的:

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;

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

您已指定std::string作为比较器。很明显,这不会达到你想要的效果,我甚至对它的编译感到有些惊讶。basic_string确实有一个operator<——这一定是它编译的原因。

我想你对multimap到底是什么感到困惑。multimap不能用来在一个键和其他不同类型的值之间进行映射。multimapmap的相同之处在于它在单个键和值之间进行映射,不同之处在于使用multimap可以将多个值映射到单个键。

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;

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