これは愚かな質問かもしれません。しかし、私は混乱しています。 W.r.t std :: map。私はSTL std :: map dynamic ordering
enum OrderingType
{
ASCENDING,
DESCENDING
};
template <class T>
class Ordering
{
OrderingType m_order;
public:
Ordering(OrderingType order) : m_order(order) { }
bool operator() (const T &obj1, const T &obj2)
{
if(m_order == ASCENDING)
return obj1 < obj2;
if(m_order == DESCENDING)
return obj1 > obj2;
}
};
利点は我々が
OrderTypeタイプ=(いくつかの条件にマップ内のデータ要素の順序を決めることができ
で、マップのdymanic発注のカスタム述語を書かれています条件?昇順:DESCENDING); カスタムマップm(タイプ)。
我々は両方の&は、以下のコードで注文マップ
降順昇順に同じ前方イテレータを使用することができます。地図の注文は両方とも昇順で動作します(&降順)。しかし、割り当てmap2 = map1では、map2の順序はコンテンツとともに変化します。私は、注文の変更ではなく、コンテンツのみをコピーすることが期待されていました。さらにmap2(これは降順として宣言された)上の挿入は昇順になります。
任意の提案またはアイデア..またはマップのための2つの方法順序付け述語を定義することは悪い考えです..?まあmap2 = map1
設定
typedef map<int, int, Ordering<int> > CUSTOMMAP;
typedef CUSTOMMAP::iterator CUSTOMMAP_ITER;
typedef CUSTOMMAP::const_iterator CUSTOMMAP_CONST_ITER;
ostream& operator <<(ostream& out, const CUSTOMMAP& mapobj)
{
CUSTOMMAP_CONST_ITER citer = mapobj.begin();
for(; citer != mapobj.end(); ++citer)
{
out << citer->first << " " << citer->second << endl;
}
out << "==========" << endl;
return out;
}
int main()
{
CUSTOMMAP map1(ASCENDING); //instantiate a map with ascending sorting
CUSTOMMAP map2(DESCENDING); //instantiate a map with descending sorting
map1.insert(make_pair(1, 0));
map1.insert(make_pair(2, 0));
cout << map1; // prints data in ascnding manner
map2.insert(make_pair(5, 0));
map2.insert(make_pair(6, 0));
cout << map2; // prints data in descending manner
map2 = map1;
cout << map2; //copys contents of map1 to map2 & changes
//map2's ordering predicate
return 0;
}
複雑さに関する編集の良い点。 –
@ user470379: 'clear' +' insert'の代わりに 'assign'を使うかもしれません。 –
複雑さに関する素晴らしい説明....多くの助けを受けました... – Naveen