关于STL的map.find()问题

#include
#include

using namespace std;

int main( )
{
map m1;
map ::iterator m1_Iter;

m1.insert ( pair ( 1, 20 ) );
m1.insert ( pair ( 4, 40 ) );
m1.insert ( pair ( 3, 60 ) );
m1.insert ( pair ( 2, 50 ) );
m1.insert ( pair ( 6, 40 ) );
m1.insert ( pair ( 7, 30 ) );

map::iterator p;
map::iterator prev;
map::iterator next;
p = m1.find(2);
prev = p;
next =p;
--prev;
++next;

cout << prev->first << " " << prev->second << endl;
cout << next->first << " " << next->second << endl;

}


图片说明

为什么输出结果会是 1 和 3。

因为map内部是按照key的顺序排序的,不是按照插入的顺序排序的。

楼上说出了关键点,map不像vector是按照插入的顺序而排列的,它会自动按照key来排序(楼主可以用迭代器遍历map来验证)
同时find()函数返回一个迭代器指向键值为key的元素(这个楼主肯定知道)