std:map与迭代器简析
来源:互联网 发布:腾讯tim ubuntu 编辑:程序博客网 时间:2024/06/06 20:10
背景
最近在读ROS操作系统源代码,多处遇到std::map这一容器。为更好理解ROS源代码,现将std::map的相关知识进行一个梳理。
因ROS而动意写此文,故主要描述与ROS代码相关部分。
容器map简析
std::map是一种关联容器,查询一个元素是否存在,并有效地获取元素。具体地,map是一个键/值(key/value)对,键(key)用于查询,而值(value)包含我们希望使用的数据。例如电话号码本,键是人名,而值是对应的电话号码。
#include <iostream>#include <map>int main() { std::map<int, float> num_map; num_map[4] = 4.13; num_map[9] = 9.24; num_map[1] = 1.09; // 调用 a_map.begin() 及 a_map.end() for (auto it = num_map.begin(); it != num_map.end(); ++it) { std::cout << it->first << ", " << it->second << '\n'; }}
输出为:
1, 1.094, 4.139, 9.24
其中,调用的 a_map.begin() 及 a_map.end()属于迭代器,用于访问容器中的元素,详见下一节。对于迭代器,it->first提取键,it->second提取值。
map容器的常用成员函数:
bool empty() const;
检查容器是否为空,即是否begin() == end()
size_type size() const;
返回容器中的元素数,即std::distance(begin(), end())
void clear();
从容器移除所有元素。void erase( iterator position );
删除的元素pos;void erase( iterator first, iterator last );
移除的元素的范围内[first; last).iterator find( const Key& key );
找到key对应的元素。例:
#include <string>#include <iostream>#include <map>int main(){ typedef std::map<std::string,int> mapT; mapT my_map; my_map["first"]= 11; my_map["second"]= 23; mapT::iterator it= my_map.find("first"); if( it != my_map.end() ) std::cout << "A: " << it->second << "\n"; it= my_map.find("third"); if( it != my_map.end() ) std::cout << "B: " << it->second << "\n"; // Accessing a non-existing element creates it if( my_map["third"] == 42 ) std::cout << "Oha!\n"; it= my_map.find("third"); if( it != my_map.end() ) std::cout << "C: " << it->second << "\n"; return 0;}
输出:
A: 11C: 0
迭代器(iterator)简析
迭代器(iterator)提供了一种一般化的方法,对顺序或关联容器类型中的每个元素进行连续访问。例如,假设 iter 为任意容器类型的一个迭代器,则
++iter;
表示向前移动迭代器,使其指向容器的下一个元素 而
*iter;
返回 iterator 指向的元素的值。
每种容器类型都提供一个 begin()和一个 end()成员函数
container.begin()//返回一个 iterator,它指向容器的第一个元素container.end()//返回一个 iterator,它指向容器的末元素的下一个位置
为了遍历容器中的每一个元素,我们可以这么写:
for (iter = container.begin();iter != container.end(); ++iter){do_something_with_element( *iter );}
阅读全文
0 0
- std:map与迭代器简析
- std::map与std::vector
- std::map与std::set
- Qt QMap与std map的遍历
- std::map&&std::set
- std::map & std::hash_map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- std::map
- Java比较器描述
- C++头文件和源文件的关系以及makefile文件
- 前缀式的计算
- MySQL——根据某时间点查询其前后数据记录并正序输出到TXT文件
- Algorithms(二)Maximum Subarray
- std:map与迭代器简析
- Netty心跳检测篇之IdleStateHandler
- tensorflow使用中遇到的问题
- Spring_5 声明式事物
- Meclipse设置默认编码为UTF-8
- 页面布局:三栏布局,假设高度已知,左右宽度固定为300px,中间自适应。
- 解决方案集X1
- TF-IDF 加权及其应用
- android 64位机子兼容32位so包的操作