【学习C++】Map使用
2017-12-07 21:45
197 查看
记录一些我遇到过,但是没有真正记住的C++知识
首先正向迭代器的指向与用指针运算符操作的内存是一致的,而对于反向迭代器,由于遵守了区间以空位置为结束的规定,则rbegin()指向了end()也指向的内存,但这一块区域是未知的,所以在进行指针运算操作时作用于前一块内存。
需要注意的是:若指向值未知的内存,会显示错误
例如下代码:
显示如下错误:
map::upper_bound(key):返回map中第一个大于key的迭代器指
在具体情况下利用upper_bound(key)函数实则是想找到在Map容器内比key值大中最小的位置。下面两段代码思想可用于电梯调度的算法。
Map
stl中的一个二元组容器(key->value),不允许key值重复。其底层实现原理为红黑树,其插入查找删除的效率综合而言相对高于AVL.1.若用insert语句插入相同的key值时,第二次进行插入的操作会失败,(而用数组会覆盖)
几种不同的插入方式: map<unsigned int, int>Map; Map.insert(make_pair<unsigned int, int>(23, 2)); Map.insert(map<unsigned int, int>::value_type(150, 2)); Map.insert(pair<unsigned int, int>(30, 2)); //其中insert返回bool型显示操作是否成功
2.了解容器的迭代器
首先容器的区间是左闭右开的,区间是以空位置作为结束的,下图显示了正向迭代器和反向迭代器之间的区别和相同之处。首先正向迭代器的指向与用指针运算符操作的内存是一致的,而对于反向迭代器,由于遵守了区间以空位置为结束的规定,则rbegin()指向了end()也指向的内存,但这一块区域是未知的,所以在进行指针运算操作时作用于前一块内存。
需要注意的是:若指向值未知的内存,会显示错误
例如下代码:
map<unsigned int, int>::iterator i = Map.end(); cout << i->first << endl;
显示如下错误:
3.利用find()函数查找某个键值是否存在,若不存在返回迭代器Map.end(),存在返回该键所在位置的迭代器
map<unsigned int, int>::reverse_iterator i = Map.find(2);/报错 //由此可见find返回的是正向的迭代器 map<unsigned int, int>::iterator it = Map.find(20); if (it != Map.end()) {cout << "找到" << endl;} else if((++it)!=Map.end()){ cout << "下一个"<<it->first << endl;//要先判断是否越界再进行访问 }
4.lower_bound(key)与upper_bound(key)
map::lower_bound(key):返回map中第一个大于或等于key的迭代器指针map::upper_bound(key):返回map中第一个大于key的迭代器指
在具体情况下利用upper_bound(key)函数实则是想找到在Map容器内比key值大中最小的位置。下面两段代码思想可用于电梯调度的算法。
map<unsigned int, int>::iterator i = Map.upper_bound(155);//155 160 //upper找到比key值大的第一个元素所在位置 //正向查找离key值最近的元素 if (i == Map.end()) { cout << "未找到!" << endl; //这里利用了反向迭代器指向正向迭代器的前一个位置 //未找到反向查找 map<unsigned int, int>::reverse_iterator ri(i); cout << ri->first << endl; } else { cout << i->first << endl; }
map<unsigned int, int>::iterator it = Map.upper_bound(25);//15 25 if (it == Map.begin()) { cout << "没有找到比15更小的" << endl; cout << it->first << endl; } else { map<unsigned int, int>::reverse_iterator ri(it); cout << ri->first << endl; }
相关文章推荐
- map 学习(上)——C++中 map 的使用
- C++ STL容器的学习使用(vector、queue、list、set、map)
- C++学习笔记——map与set的组合使用
- c++学习笔记-map的使用实例(单词转换)
- 菜鸟学习c++—map使用练习 实现词频统计程序
- 使用c++开发学习笔记
- c++ 学习使用 template
- [C++再学习系列] 避免使用宏
- 被误解的C++——学习和使用
- 智能指针auto_prt的使用(c++学习笔记)
- [学习笔记][C++Primer Plus]使用cout格式化输出字符串,3q xuzhong
- 使用doxygen从c++代码中生成文档的方法学习
- C++ map的使用
- C++ STL学习笔记十二 hash_map映照容器
- 词频统计的C++实现(使用stl--map)
- C++ 标准库 vector list map 基本使用方法 示例程序
- C++之父元旦专访(8+13个问题,关于C++的学习&使用和未来)
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- Windows编程 C++ DLL编程 学习笔记(一)静态链接库的创建和使用
- 《被误解的C++——学习和使用》的案例