STL-multimap

如果键值是string型,直接输出就可以了,multimap是排好序了的,

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点
eg:
map<string,string> mapTest;
typedef map<string,string>::iterator ITER;

ITER iter=mapTest.find(key);
mapTest.erase(iter);

像上面这样只是删除单个节点,map的形为不会出现任务问题,
但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.
像下面这样的一个例子就是错误的写法,
eg.
for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter);
}

这是一种错误的写法,会导致程序行为不可知.究其原因是map 是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。
可以用以下方法解决这问题:

正确的写法
1.使用删除之前的迭代器定位下一个元素。STL建议的使用方式
for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter++);
}

2. erase() 成员函数返回下一个元素的迭代器
for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter);
}

时间: 2024-07-28 18:21:53

STL-multimap的相关文章

UVa 156 Ananagrams:用STL multimap&amp;amp;set处理字典中的重复元素

156 - Ananagrams Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=98&page=show_problem&problem=92 Most crossword puzzle fans are used to anagrams--groups of words with the same letters

STL之六:map/multimap用法详解

map/multimap     使用map/multimap之前要加入头文件#include<map>,map和multimap将key/value当作元素,进行管理.它们可根据key的排序准则自动将元素排序.multimap允许重复元素,map不允许重复元素. map和multimap内部的数据结构也是平衡二叉树.     map和multimap根据元素的key自动对元素进行排序,要修改元素的key必须先删除拥有该key的元素,然后插入拥有新的key/value的元素. 常用函数 1.构

STL之multiset中equal_range,multimap中的equal_range,bitset容器,string字符串操作,lambda表达式

 1multiset中用equal_range来遍历所有的元素 #include <set> #include <iostream> using namespace std;   //multiset中存储的元素是不重复的 void main() {     multiset<int> myset;     myset.insert(100);     myset.insert(101);     myset.insert(100);     myset.inser

STL之红黑树容器:set,hash_set,multiset,hash_map,multimap

 1红黑树set(不能包含重复元素) 案例1:红黑树容器set,插入,查找 #include<iostream> #include<set> usingnamespacestd;   //set中不能有重复的元素,它是一个红黑树容器 voidmain() {    set<int>myset;    myset.insert(10);    myset.insert(9);    myset.insert(8);    myset.insert(7);    mys

STL之Map

概述 Map是标准关联式容器(associative container)之一,一个map是一个键值对序列,即(key ,value)对.它提供基于key的快速检索能力,在一个map中key值是唯一的.map提供双向迭代器,即有从前往后的(iterator),也有从后往前的(reverse_iterator). map要求能对key进行<操作,且保持按key值递增有序,因此map上的迭代器也是递增有序的.如果对于元素并不需要保持有序,可以使用hash_map. map中key值是唯一的,如果马匹

详细解说 STL 排序(Sort)

排序 一切复杂的排序操作,都可以通过STL方便实现 ! 0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性.不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的b

体验Visual C++.NET 2005中的STL

为了更好的使STL适合.NET开发,Visual C++产品组,在2005版的Visual C++中重新设计了STL,并命名为STL.NET,从Beta1版本的产品中开始提供. 在STL.NET的设计中,STL的实现使用了CLI泛型和C++模版机制.2005版本的C++将加入C++/CLI动态编程的支持,应当会成为最能够满足程序员设计的语言. 给予程序员丰富的选择 总共有三个容器库可供程序员用于操作CLI类型,这三个容器库建于三种类型参数化模型之上. 原先元素类型存储的Systems::Coll

STL学习系列之四:STL学习小结

提供了类型安全.高效而易用特性的STL无疑是最值得C++程序员骄傲的部分.每一个C++程序员都应该好好学习STL:). STL(Standard Template Library 标准模板库)是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的:一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,一个原因了,C++中已经有了模板.在后来,STL又被添加进了C++库.1996年,惠普公司又免费公开了STL,为

C++ STL简介

一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比

详细解说STL hash_map系列 〔转载〕

详细解说STL hash_map系列 0 为什么需要hash_map 1 数据结构:hash_map原理 2 hash_map 使用 2.1 一个简单实例 2.2 hash_map 的hash函数 2.3 hash_map 的比较函数 2.4 hash_map 函数 3 相关hash容器 4 其他 4.1 hash_map和map的区别在哪里? 4.2 什么时候需要用hash_map,什么时候需要用map? 4.3 如何在hash_map中加入自己定义的类型? 4.4如何用hash_map替换程