2 icefoshu icefoshu 于 2016.04.09 00:46 提问

关于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。

3个回答

caozhy
caozhy   Ds   Rxr 2016.04.09 05:58
已采纳

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

qq423399099
qq423399099   Ds   Rxr 2016.04.09 09:26

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

CSDNXIAOD
CSDNXIAOD   2016.04.09 00:52

STL map: [] 还是find
STL_map——map::find
STL中关于map和set的一些问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!