为std::map定义一个比较函数,它使用值而不是键

Define a compare function for std::map which uses values instead of keys

本文关键字:函数 比较 定义 map std 一个      更新时间:2023-10-16

我可以像这样为一个映射定义一个比较类:

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

,但这里lhsrhs代表键。如果我想按值而不是按键比较呢?我该怎么做呢?

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

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

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

也就是说,这听起来像是您试图根据键的值动态地重新排序键。在这种情况下,您可能需要查看支持减少键的优先级队列,因为这可能更符合您要做的事情。

希望这对你有帮助!