我发现可以声明这样的std :: multimap:
multimap < u_int32_t, u_int32_t,string> lines;
如果可以声明它,则应该也可以插入
但我不知道怎么办?
我尝试了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) );
全部谢谢!
答案 0 :(得分: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;
第三个模板参数用于比较器。你的代码没有任何意义。拥有三种类型的多图也没有任何意义。它从键映射到值,第三种类型应该是什么意思?
答案 1 :(得分:4)
这是错误的:
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
不是可用于在键和不同类型的值之间进行映射的东西。 multimap
与map
相同,因为它在单个键和值之间进行映射,但区别在于multimap
与{{1}}不同,您只能将一个值映射到单个键