按计数对多映射进行排序
Sort multimap by count
请帮我按值计数对多映射进行排序。
例如
multimap<char,int> mymultimap;
mymultimap.insert (pair<char,int>('a',100));
mymultimap.insert (pair<char,int>('a',101));
mymultimap.insert (pair<char,int>('a',111));
mymultimap.insert (pair<char,int>('b',200));
mymultimap.insert (pair<char,int>('b',211));
mymultimap.insert (pair<char,int>('c',300));
应按以下顺序排序后:
c
b
a
我尝试像这样使用自定义比较器:
struct comparer
{
bool operator() (const char& first, const char& second) const
{
return mymultimap.count(first) < mymultimap.count(second);
}
};
但我无法定义
multimap<char, int, comparer> mymultimap;
在定义struct comparer
之前。
这
是不可能的。
除非您继续创建自定义结构,否则您似乎需要一个结构来跟踪所有项目(此处为对),并且需要一个结构来实际计算它们。
实际选择主要取决于排序操作是一次性计算,还是实际需要保持两者同步。
如果它是一次性计算,那么只需在需要时计数并完成它。
如果你需要保持这个顺序,那么我建议阅读Boost.MultiIndex,并将其用作开发自定义类的基础。
这
是不可能的。比较器有一个限制,即当比较两件事时,它们总是一致地进行比较。例如:如果"a"小于"b",则必须始终为真。
在比较器中,您违反了此规则,因为向多重映射添加更多"a"或"b"可能会突然导致比较结果发生变化。
多重映射使用比较器来组织其在内存中存储元素的方式。如果两个元素可以以一种方式比较,然后突然以不同的方式进行比较,那么多重映射中元素的整个组织将不得不改变。当您只插入一个新元素时,不会实现 multimap 来重新排列其所有现有内容,因为这样做效率非常低。
相关文章:
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- 如何按值对无序哈希映射进行排序
- 从映射<字符串、矢量中对唯一值进行排序<string>>
- 映射C++按值排序和插入元素
- 使用按插入方式排序的参数创建哈希映射
- 为什么内置排序无法对向量映射进行排序
- 根据类成员对同一密钥的多映射元素进行排序
- 以std::字符串作为关键字,按字典顺序对一个无序映射进行排序
- 使用原子指令确保映射访问安全,是否可以使用两个不同的原子对指令进行重新排序
- 通过多个键和存储映射对大量向量进行排序
- 对键进行排序后,按值对多映射进行排序
- 字节不符合记忆映射和对文件进行排序
- 排序标准::映射<字符串,双精度>
- STL映射排序
- 将C++内存排序映射到Java
- 对一个无序映射c++进行排序时数据丢失
- 如何使用模板创建排序映射整数索引
- 存储内部排序映射元素的最快方式
- 在Rcpp中用(西班牙语)重音单词排序映射
- 是否有一个平面的未排序映射/集实现