std::map<a,b>
で順序付け基準を定義する を作成していa::operator<
ます。
ある時点でマップのタイプを変更して、今後別のソートアルゴリズムによって順序付けられるようにする方法はありa
ますか? マップの現在のコンテンツも並べ替える必要があります。
次のように、別のマップを作成し、最初のマップの要素を 2 番目のマップにコピーする必要があります。
std::map<a,b> map1;
... // operations on map1
std::map<a,b,Sorter> map2(map1.begin(), map1.end());
答えは次の宣言にあります。std::map
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class map;
Compare
テンプレート引数を使用して、マップの順序付けの比較を定義できます。
Compare : 比較クラス: キー型の 2 つの引数を取り、bool を返すクラス。comp がこの比較クラスのオブジェクトであり、a と b がキー値である式 comp(a,b) は、厳密な弱い順序付け操作で a が b よりも前の位置に配置される場合、true を返します。これは、関数呼び出し演算子または関数へのポインターを実装するクラスのいずれかです (例については、コンストラクターを参照してください)。これはデフォルトで less になり、less-than 演算子 (a < b) を適用した場合と同じ結果が返されます。マップ オブジェクトは、この式を使用して、コンテナ内の要素の位置を決定します。マップ コンテナー内のすべての要素は、常にこの規則に従って並べられます。
ここから引用しました