C++;:地图排序 我是一个C++新手,这个问题对很多人来说都是显而易见的。

C++;:地图排序 我是一个C++新手,这个问题对很多人来说都是显而易见的。,c++,map,std,C++,Map,Std,如果我写了这样的东西 std::map<int, double> m; std::map m; m是否保证按照int顺序排序 是否需要定义比较器类来强制排序 比如说, class own_int_less : public binary_function<int, int, bool> { public: bool operator()( const double &left, const double &right ) const

如果我写了这样的东西

std::map<int, double> m;
std::map 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;
};
class own\u int\u less:公共二进制函数
{
公众:
布尔运算符()(常数双精度和左、常数双精度和右)常数
{
返回(abs(左-右)>ε)和&(左<右);
};
双ε;
};
  • 排序实际上是什么时候发生的?我的意思是,每次我在地图中插入东西时,排序函数都会被调用吗?还是在我遍历映射之前调用它
谢谢

m是否保证按照int顺序排序


对。默认的比较器是
std::less
,在您的例子中是
std::less
,它只使用
您定义的
二进制函数
,但是您的
操作符()
将两个
常量double&
作为参数…请小心初始化您的成员变量。(
epsilon
在您的示例中从未初始化)。