C++笔记:map键值类型,元素删除
2015-03-25 11:51
1366 查看
键值类型:
在实现模板时,如果参数用到了map,则常需要使用map的键值类型:
map<K, V>::key_type
在map容器内,用做索引的键的类型
map<K, V>::mapped_type
在map容器中,键所关联的值的类型
map<K, V>::value_type
map的值类型:一个pair类型,pair对应的first,second分别对应上面的两个类型
元素删除:
在线性容器中,调用erase删除元素时都会返回删除元素的下一个元素的迭代器;而在关联容器中,调用erase删除元素时是返回void的,通过迭代器删除元素后,迭代器失效,若要重用迭代器,需重新赋值:
之所以不用clear,是因为一般都需要在删除的同时做些其他处理
在实现模板时,如果参数用到了map,则常需要使用map的键值类型:
map<K, V>::key_type
在map容器内,用做索引的键的类型
map<K, V>::mapped_type
在map容器中,键所关联的值的类型
map<K, V>::value_type
map的值类型:一个pair类型,pair对应的first,second分别对应上面的两个类型
元素删除:
在线性容器中,调用erase删除元素时都会返回删除元素的下一个元素的迭代器;而在关联容器中,调用erase删除元素时是返回void的,通过迭代器删除元素后,迭代器失效,若要重用迭代器,需重新赋值:
#include <iostream> #include <vector> #include <deque> #include <list> #include <map> using namespace std; void testVector() { vector<int> v; for(int i=0; i<10; i++) v[i] = i; vector<int>::iterator it = v.begin(); for(;it != v.end();) it = v.erase(it); //通过对迭代器的重新赋值,而不通过v.erase(it++),因为这样会漏掉元素 for(it=v.begin(); it != v.end(); it++) cout<<*it<<endl; } void testDeque() { deque<int> d; for(int i=0; i<10; i++) d[i] = i; deque<int>::iterator it = d.begin(); for(;it != d.end();) { it = d.erase(it); //通过对迭代器的重新赋值,而不通过d.erase(it++) //d.erase(it++); //通过这种方式会出现段错误 } for(it = d.begin(); it != d.end(); it++) cout<<*it<<endl; } void testList() { list<int> l; for(int i=0; i<10; i++) l.push_back(i); list<int>::iterator it = l.begin(); for(;it != l.end();) { it = l.erase(it); //通过对迭代器的重新赋值, //l.erase(it++); //通过在删除前对迭代器进行自增长,两种方式都可以 } for(it = l.begin(); it != l.end(); it++) cout<<*it<<endl; } void testMap() { map<int, int> m; for(int i=0; i<10; i++) m.insert(make_pair(i,i)); map<int,int>::iterator it = m.begin(); for(;it != m.end();) { m.erase(it++); //通过在删除前对迭代器进行自增长,不能通过获取删除后的返回值,因为返回值是void } for(it = m.begin(); it != m.end(); it++) cout<<*it<<endl; }
之所以不用clear,是因为一般都需要在删除的同时做些其他处理
相关文章推荐
- C++编程笔记——从map时中删除元素
- map和vector删除元素的区别
- 【慕课笔记】第五章 JAVA中的集合框架(中) 第3节 学生选课——删除Map中的学生
- C++遍历中删除std::map元素
- java 集合元素的删除要使用迭代器(Iterator) 笔记
- 【C++ Primer】【学习笔记】【第十章】关联容器之:map类型
- Java_Map插入自定义数据类型保证元素唯一
- C++:在遍历/循环中删除map元素, 如何避免iter 迭代器失效
- 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminator?)"
- 删除map中的元素
- 错误Mybatis 元素类型为 "resultMap" 的内容必须匹配 "(constructor?,id*,result*,association*,collection*,discriminat
- 学习笔记2-确认删除操作-动态添加元素、事件-用户注册界面
- jQuery学习笔记(五)_添加删除元素
- Java Map在遍历过程中删除元素
- java遍历Map时remove删除元素
- map以自定义类型当Key(键值)
- C++ map以自定义数据类型做键值
- C++如何删除map容器中指定值的元素详解
- Python笔记——python 3.x中列表中元素删除del、remove、pop的用法及区别
- map以自定义类型当Key(键值)