C++:std::map 排序

标签 c++ map std

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

谢谢。

最佳答案

Is m guaranteed to be sorted according to int order?

是的。默认比较器是 std::less<Key> ,在你的例子中是 std::less<int> , 它只使用 <正如预期的那样。

Is it necessary to define a comparitor class to enforce the sorting?

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

When is the sorting actually occurred?

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

关于C++:std::map 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964920/

相关文章:

c++ - std::map 的 emplace() 如何避免过早构造?

c++ - 如何将 win32 CHAR(char) 类型转换为标准字符串?

c++ - 命名 union 的原因是什么?

c++初学者错误,家庭作业

iOS MapKit - 通过保持地球的球面轨迹在两点之间创建一条线?

php - 如何使用 Google Maps API 根据距离进行搜索?

C++ - 字符串流 << "overwriting"

c++ - 如何设置连接超时

c++ - 模板的另一个问题

map - 从 Dart Map 中删除选定的键