3

std::map<a,b>で順序付け基準を定義する を作成していa::operator<ます。

ある時点でマップのタイプを変更して、今後別のソートアルゴリズムによって順序付けられるようにする方法はありaますか? マップの現在のコンテンツも並べ替える必要があります。

4

2 に答える 2

8

次のように、別のマップを作成し、最初のマップの要素を 2 番目のマップにコピーする必要があります。

std::map<a,b> map1;
... // operations on map1
std::map<a,b,Sorter> map2(map1.begin(), map1.end());
于 2012-06-20T21:23:29.083 に答える
1

答えは次の宣言にあります。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) を適用した場合と同じ結果が返されます。マップ オブジェクトは、この式を使用して、コンテナ内の要素の位置を決定します。マップ コンテナー内のすべての要素は、常にこの規則に従って並べられます。

ここから引用しました

于 2012-06-20T21:23:18.603 に答える