2012-04-01 11 views
3

私はC++の初心者ですが、この質問は多くの人にとって明らかなようです。C++:std :: map sorting

私は

std::map<int, double> m; 
  • ような何かを書く場合は、mはint型の順序に従ってソートされることが保証されて?
  • 並べ替えを強制するためにコンパイラクラスを定義する必要がありますか?

例えば、

class own_int_less : public binary_function<int, int, bool> 
{ 
public: 
    bool operator()(const double &left, const double &right ) const 
    { 
     return (abs(left - right) > epsilon) && (left < right); 
    }; 
    double epsilon; 
}; 
  • ソートが実際に発生している場合は?私はソート関数が地図に何かを挿入するたびに呼び出されるのですか?それとも、マップを繰り返し実行する前に呼び出されますか?

ありがとうございます。

+3

'binary_function 'を定義しましたが、 'operator()'は 'const double&'として2つのパラメータを取っています... –

+0

メンバ変数を初期化してください。 ( 'epsilon'はあなたの例で決して初期化されません)。 –

答えて

10

intはint順序に従ってソートされていますか?

はい。デフォルトの比較器はstd::less<Key>です。この場合はstd::less<int>であり、期待通りに<を使用します。

並べ替えを強制するためにコンパイラクラスを定義する必要がありますか?

いいえ、以前の回答が「はい」だったためです。

実際にソートが行われるのはいつですか?

代表的なmap実装では、コンパレータを使用して新しい要素を正しい場所に挿入します。コンパレータは、ルックアップを行うときにも使用されます。