私は、必要なオーバーロードされた演算子を持つコンテナとして機能する、内部に動的に割り当てられた配列であるsetというクラスを持っています。この配列(1D)は、セット全体がこの配列に挿入されたとき(std :: setを使うよりはるかに速い)、std :: sortでソートする(天文学的に大きな、時には)整数を格納します。これらのセットはstd :: mapに格納され、doubleのキーとして機能し、std :: mapにすでにセットがあるときにインクリメントされ、現在のセットがstd :: mapコンテナにない場合は挿入されますカウンタは「0」である。 std :: mapはそれが必要なので、オペレータ<をオーバーロードしようとしました。しかし、それはセグメンテーション違反を引き起こします。配列の最初のメンバー(arrという名前)は、配列の整数の個数を格納します。配列の長さの合計はarr [0] +1です。オペレータを正しくオーバーロードする方法<ユーザ定義タイプのstd :: mapで使用するには?
私がRAM(64GB)から速く走っているために、ベクターや新しい配列タイプを使用していない理由は、ピークモーメント(サブセットの生成)でサイズ2^10〜2^11になります最小限のスペースオーバーヘッドで独自のバージョンのベクトルを作成することができます。
bool operator<(const set& s1, const set& s2)
{
if (s1.arr[0] < s2.arr[0])
return true;
else if (s1.arr[0] > s2.arr[0])
return false;
if (s1.arr[0] == s2.arr[0])
{
for (int i = 1; i < s1.arr[0]+1; i++)
{
if (s1.arr[i] > s2.arr[i]) return false;
}
}
return true;
}
メインの 'if(a <= b);それ以外の場合はfalseを返します。 '(a> b)がfalseを返す場合、 ' – chris
クラスに別の名前を付けてください。' set'は標準ライブラリコンテナです。 – juanchopanza
@juanchopanza: 'set'は標準ライブラリコンテナではありません。' std :: set'はです。 – SigTerm