【问题标题】:C++: std::map sortingC++:std::map 排序
【发布时间】:2012-04-01 13:56:15
【问题描述】:

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

如果我写类似

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;
};
  • 排序实际发生在什么时候?我的意思是每次我在地图中插入一些东西时都会调用排序函数吗?还是在我遍历地图之前调用它?

谢谢。

【问题讨论】:

  • 您定义了一个binary_function&lt;int, int, bool&gt;,但您的operator() 将两个const double &amp; 作为参数...
  • 小心初始化你的成员变量。 (epsilon 在您的示例中从未初始化)。

标签: c++ map std


【解决方案1】:

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

是的。默认比较器是std::less&lt;Key&gt;,在您的情况下是std::less&lt;int&gt;,它只是按预期使用&lt;

是否需要定义一个比较器类来强制排序?

不,因为之前的回答是“是”!

排序实际发生在什么时候?

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

【讨论】:

    猜你喜欢
    • 2015-12-04
    • 2012-05-27
    • 2019-05-03
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多