我发现可以声明这样的std :: multimap:
multimap < u_int32_t, u_int32_t,string> lines;
Run Code Online (Sandbox Code Playgroud)
如果可以声明它,那么也应该插入它
但我想知道怎么样?
我试过了std::pair,但似乎我需要类似的东西std::triple.
我知道可以删除一些结构并保留该结构中的一些值.但我宁愿直接这样做.此外,因为它可以声明它.
编辑
我做了严重的错误,事实证明我真的理解多图错误.
这里人们的尖叫声和downvotes让我重新阅读文档.现在我用它:
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) );
Run Code Online (Sandbox Code Playgroud)
谢谢大家!
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;
Run Code Online (Sandbox Code Playgroud)
第三个模板参数用于比较器.你的代码没有任何意义.拥有三种类型的多图也没有任何意义.它从键映射到值,第三种类型应该是什么意思?
这是错误的:
multimap < u_int32_t, u_int32_t,string> lines;
Run Code Online (Sandbox Code Playgroud)
的模板参数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;
Run Code Online (Sandbox Code Playgroud)
第一个模板参数是键,第二个是存储的类型,第三个是比较器。
您已指定std::string为比较器。显然,这无法满足您的要求,我对此感到有些惊讶,甚至可以编译。 basic_string确实有operator<-这一定是它编译的原因。
我认为您对multimap真正的东西感到困惑。 multimap不能用于在键和最不同类型的值之一之间进行映射。 multimap与map它在单个键和一个值之间映射的区别相同,不同之处在于,multimap您可以将多个值映射到单个键。