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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
STL学习之map容器(3)
map::find iterator find ( const key_type& x ); const iterator find( const key_type& x) const; 获取元素的迭代器 获取map容器中指定键值x的元素,如果找到,返回此元素的迭代器,否则返回map::end()的迭代器(即查找到容器的末尾都没有找到此元素)。 前面章节介绍的map::count成
STL 中map中find和map[]
转自:http://blog.csdn.net/qqwx_1986/article/details/4970574 std::map不是顺序容器,这应该都知道的,map中重载了operator []操作符,可以用map的键值索引到相关的数据,但是这个[]和一般数组的[]可不一样。有的人又认为既然[]就是利用下标做索引和std::map中的find用键值索引是不是一样的,所以有的会写出下面类似的代
stl map find使用不当导致的低概率core dump问题的定位
最近呢, 收到低概率core dump告警, 不频繁, 但挺恼人, 那就展开定位呗。再低概率的core, 在亿万请求下, 必然会发生。        这么搞起:        1. 上外网core dump的机器一看, 没有core文件了, 于是从backup目录找到了备份的core        2. 看了一下core文件的大小, 太小, 无法定位, 这肯定是被截断了。
STL之map::find方法的使用小例子
// map::find #include <iostream> #include <map>int main () { std::map<char,int> mymap; std::map<char,int>::iterator it; mymap['a']=50; mymap['b']=100; mymap['c']=150; mymap['d']=200; it = m
多线程操作stl::map引起的数据不一致问题的解决过程与方法
昨天晚上业务出现了一次core dump,今天早上来check生产环境的core文件的堆栈内容如下: gdb ./appname --core=core.1234 (gdb) bt 得到栈的内容如下: #0 0x00007f5634262734 in std::_Rb_tree_rotate_right ()
STL中容器的迭代器在什么情况下会失效?
原文地址:原文地址 迭代器(iterator)是一个可以对其执行类似指针的操作(如:解除引用(operator*())和递增(operator++()))的对象,我们可以将它理解成为一个指针。但它又不是我们所谓普通的指针,我们可以称之为广义指针,你可以通过sizeof(vector::iterator)来查看,所占内存并不是4个字节。      首先对于vector而言,添加和删除操作
map find find_if用法
#include #include #include #include using namespace std; bool equal(pair data, int target) { if (data.second == target) { return true; } else { return false; } } int main() { //
stl容器中count与find的区别
map和set两种容器的底层结构都是红黑树,所以容器中不会出现相同的元素,因此count()的结果只能为0和1,可以以此来判断键值元素是否存在,当然也可以使用find()方法判断键值是否存在。 find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素。 std::map::find(
std::map find 陷阱
正确做法std::map<int,int*>::iterator iter = mapTemp.find(i);if( mapTemp.end() != iter ) return iter->second;return NULL;1.注意判断空,如果不判断是否为mapTemp.end(),如果用mapTemp[x].second方式获取,系统会自己偷偷插入一个查询的键。 因此直接 r
stl std::find使用
原型与概述<br />它与所有的STL算法一样,是一个模板函数,它的原型如下: #include <algorithm><br />template<class InputIterator, class T><br />InputIterator find ( InputIterator first, InputIterator last, const T& value );<br /> <br />在区间 [first, last) 里查找值为 value 的对象。参数与返回值<br />参数:本算法的功