3

我可以为这样的地图定义一个比较类:

struct classcomp {
    bool operator() (const string& lhs, const string& rhs) const
    {
        if(lhs < rhs)
            return true;
        else 
            return false;
    }
};

但在这里lhsrhs代表键。如果我想按值而不是键进行比较怎么办?我将如何做到这一点?

4

2 回答 2

4

这与你想要什么无关;这是关于std::map想要什么。排序基于内存中元素的布局(通常是树结构),并且正是这个过程使用了比较器。希望不是这样,但事实并非如此!

在我看来std::map,容器选择不符合您的要求。参考容器选择流程图来决定下一步做什么。

于 2013-01-14T18:29:49.680 回答
2

std::map 类型不支持按值进行比较。如果要按值进行比较,则应考虑制作一个新的 multimap,其键表示旧映射中的值,其值表示旧映射中的键。

也就是说,听起来您正在尝试根据键的值动态重新排序键。在这种情况下,您可能希望查看支持减少键的优先级队列,因为这可能更符合您要执行的操作。

希望这可以帮助!

于 2013-01-14T17:59:29.427 回答