このような方法で、2 つのメンバーに従ってクラス オブジェクトの並べ替えを取得しようとしています: メンバーに従って並べ替えます。2 つのオブジェクトの値が同じ場合 (または差がしきい値を下回っている場合) は、メンバーbに従って検索します。私はそれでマルチセットを使用しています。
問題は、別のオブジェクトが来て、並べ替えクラスに従ってチェックされ、満たすと true を返す (比較対象のオブジェクトよりも上位に配置される) 場合、別のオブジェクトが 1 段階上にあることで満たされる可能性があることです。ここで、できるだけ多くの以前のオブジェクトをチェックし、可能な限り高くする必要があることをどのように紹介できますか? (非常によくソートされたマルチセットを取得するために!) ソート クラスの書き方を以下に示します。素敵なアイデアを教えてください!
そして、コードのこの部分にインデントを導入するのに問題がありました。編集を手伝ってくれる人はいますか? それは読めません。
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;
}