c++多映射插入两个以上的值
c++ multimap insert more than two values
我发现可以声明这样的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
不能用来在一个键和其他不同类型的值之间进行映射。multimap
与map
的相同之处在于它在单个键和值之间进行映射,不同之处在于使用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。你的代码没有任何意义。有三种类型的多映射也没有任何意义。它从键映射到值,第三种类型应该是什么意思?
相关文章:
- 比较两个大小不等的映射c++
- 我可以比朴素哈希表更快地将随机字符串映射到两个类吗?
- 如何通过键和值以及在C 中的结果映射中比较两个地图?我们有任何STL API吗?
- 在两个映射中查找共同值,无需迭代
- 如何使用 std::multimap 将整数键映射到两个用作多维数组坐标的整数值(对于井字)?
- 如何协同映射以下两个对象?
- 两个进程之间的共享映射内存在编辑时未更新
- 使用原子指令确保映射访问安全,是否可以使用两个不同的原子对指令进行重新排序
- 合并两个映射 c++
- 如何合并两个 mpl 映射生成新映射
- 错误:尝试在两个映射中插入时,"__x < __y"中的"运算符<"不匹配
- 指向同一项的两个映射迭代器是否保证相等
- 合并两个映射,对C++中相同键的值求和
- 使用c++减少两个映射的处理时间
- 两个映射之间的分配-移动语义和性能
- 合并两个映射<字符串,整数>
- 两个映射不匹配
- 键上的两个映射相交,保留第一个映射的值
- c++ 11 STL在两个映射之间使用move赋值合并
- 有没有一种优雅的方法来遍历两个映射并比较值(映射具有相同的类型)