我可以像这样为一个映射定义一个比较类:
struct classcomp {
bool operator() (const string& lhs, const string& rhs) const
{
if(lhs < rhs)
return true;
else
return false;
}
};
,但这里lhs
和rhs
代表键。如果我想按值而不是按键比较呢?我该怎么做呢?
这不是你想要什么的问题;这是关于std::map
想要什么。排序是基于内存中元素的布局(通常是树结构),这个过程使用比较器。希望情况不是这样,但事实并非如此!
在我看来,std::map
作为容器的选择不符合您的要求。参考容器选择流程图来决定下一步要做什么。
std::map类型不支持按值比较。如果要按值进行比较,应该考虑创建一个新的multimap,其键代表旧映射中的值,其值代表旧映射中的键。
也就是说,这听起来像是您试图根据键的值动态地重新排序键。在这种情况下,您可能需要查看支持减少键的优先级队列,因为这可能更符合您要做的事情。
希望这对你有帮助!