C++:std :: map排序

260*_*607 3 c++ std map

我是C++的新手,这个问题对许多人来说似乎很明显.

如果我写的东西像

std::map<int, double> m;
Run Code Online (Sandbox Code Playgroud)
  • 是否保证按顺序排序?
  • 是否有必要定义一个比较器类来强制执行排序?

例如,

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;
};
Run Code Online (Sandbox Code Playgroud)
  • 什么时候排序实际发生?我的意思是每次我在地图中插入一些东西时都会调用排序函数吗?或者在我迭代地图之前调用它?

谢谢.

Oli*_*rth 10

是否保证按顺序排序?

是.默认比较器std::less<Key>,在您的情况下std::less<int>,它只是<按预期使用.

是否有必要定义一个比较器类来强制执行排序?

不,因为之前的回答是"是"!

什么时候排序实际发生?

典型的map实现使用比较器将新元素插入正确的位置.在进行查找时也使用比较器.