我是 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/