请帮助我按值计数对多图进行排序。

例如,

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并将其用作开发自定义类的基础。

10-08 09:13