gpt4 book ai didi

C++使用多重集的两个优先级排序

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

我正在尝试根据其两个成员以这种方式获得类对象的排序:根据 a 成员排序。如果两个对象具有相同的值(或者差异低于某个阈值),则根据成员 b 进行搜索。我正在使用 multiset 。

问题 是,当另一个对象到来时,根据排序类进行检查,并满足返回 true(放置在比对象更高的位置),它也可能满足另一个更高一级。我如何在这里介绍,它应该检查尽可能多的先前对象,并尽可能高? (以获得真正排序好的多重集!)下面是我如何编写排序类。请给我一些好主意!

而且我在为这部分代码引入缩进时遇到了问题,有人可以帮我编辑吗?这是不可读的。

std::multiset<classA , classA ::SortClass> mydata;

class SortClass
{
public:
bool operator() (const classA &pt1, const classA &pt2)
{
if(pt1.a < pt2.a)
{
if(abs(pt1.a-pt2.a) < 0.01)
{
if(pt1.b > pt2.b)
return true;
else
return false;
}
else
return true;
}
else
return false;
}
};

编辑:

粘贴这个,看看我想要什么,不能实现什么。如果 m_a 相同,我希望它随着 m_a 增加而随着 m_b 减少(你可以把相等或不等放在那里,也不起作用)

#include <iostream>
#include <set>
using namespace std;


class classA
{
protected:
double m_b;
double m_a;

public:
double get_b() {return m_b;}
double get_a() {return m_a;}
void set_b(double b) {m_b = b;}
void set_a(double a) {m_a = a;}

class SortClass
{
public:
bool operator() (const classA &pt1, const classA &pt2)
{
if(pt1.m_a < pt2.m_a)
{
if(pt2.m_a - pt1.m_a == 0)
return (pt1.m_b > pt2.m_b);
else
return (pt1.m_a < pt2.m_a);
}
else
return false;
}
};
};
int main()
{

std::multiset<classA, classA::SortClass> mydata;
classA objA;
for(int i=0; i<100;i++)
{
objA.set_a(rand() %100);
objA.set_b(rand() %10);
mydata.insert(objA);
}

return 0;
}

最佳答案

让我们停止使用 truefalsereturn bool 表达式。它使您的代码更易于阅读。

    bool sortClassA (const classA &pt1, const classA &pt2)
{
if(pt2.m_a == pt1.m_a) {
return pt1.m_b > pt2.m_b;
}
return pt1.m_a > pt2.m_a;
};

此外,您还造成了阈值问题。简单地将阈值降低到接近于零的值,问题就会消失,否则你将不得不忍受它。我看不到任何其他方式。

关于C++使用多重集的两个优先级排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14566490/

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