gpt4 book ai didi

C++ std::map 键排序比较函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:16 25 4
gpt4 key购买 nike

我有一个重载所有比较运算符的类。我将这些对象中的一堆作为键加载到 map 中,我希望 map 将它们从最低到最高排序。

然而, map 实际上是按从大到小排序的。为什么是这样?对 map 进行排序时,它不使用键上的比较运算符吗?我怎样才能让它做到这一点?

最佳答案

如果您查看 std::map 的定义,第三个参数是比较器 - std::less< Key >默认情况下。它的默认实现只是调用 operator< .

您可以尝试在 header 中定义一个新版本,其中 YourType被定义,像这样:

template<> std::less< YourType >
{
bool operator()(
const YourType& lhs,
const YourType& rhs)
{
if(!(lhs.member1 < rhs.member1))
{
return false;
}

if(!(lhs.member2 < rhs.member2))
{
return false;
}

return true;
}
}

记得加好友std::less< YourType >在你的类里面。

实际测试必须符合以下条件,否则会出现各种问题:

  • lhs < rhs = true
  • rha < lhs = false
  • lhs < lhs = 假

需要注意的一件重要事情(我最近才发现)是,如果您的编译器开始提示您重新定义了 std::less 的含义或其他奇怪的事情,可能是您只转发了您的 YourType当你声明你的 std::map< YourType > .

希望这对您有所帮助!

关于C++ std::map 键排序比较函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com