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

时间:2013-01-14 17:56:44

标签: c++ map stl compare stdmap

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

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

但此处lhsrhs代表键。如果我想通过值而不是键来比较怎么办? 我该怎么做?

2 个答案:

答案 0 :(得分:3)

这不是想要的;它是关于std::map想要什么的。排序基于内存中元素的布局(通常在树结构中),这个过程使用比较器。希望情况不是这样,不是这样的!

听起来像std::map,因为容器选择不符合您的要求。请参阅容器选择流程图以确定下一步该做什么。

答案 1 :(得分:1)

std :: map类型不支持按值进行比较。如果要按值进行比较,则应考虑创建一个新的多图,其键表示旧地图中的值,其值表示旧地图中的键。

那就是说,听起来你正在尝试根据它们的值动态地重新排序键。在这种情况下,您可能希望查看支持reduce-key的优先级队列,因为这可能与您尝试执行的操作更加一致。

希望这有帮助!