- 浏览: 2031525 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
stl map用法总结
给出了map的基本用法如插入、查找、删除、遍历等等,同时告诉你如何实现双键map,包括
(1) 只有两个键都匹配才命中目标
(2) 两个键中任意一个匹配就命中目标
可以扩展到多键
(一) 介绍
特点:
1.map将Key的object和T的Object绑定到一起,因此是一种Pair Associative Container, 表示其value type为 pair。
2.它同时也是Unique Associative Container,表示没有两个元素具有相同的Key。
3.它还是一种Sorted Associative Container,因此第三个参数只能是less,greater之类的functor, 相比较而言,
hash table是 equal_to, not_equal_to之类的functor。
(二) 基本用法
通过以下范例,可以看出map的一些基本用法: 插入、查找、删除、遍历等等。
/* 这个是MS的bug,看着心烦,屏蔽掉警告 */
#if defined (_MSC_VER)
#pragma warning(disable: 4786)
#endif
#include
#include
#include
int main(int argc, char *argv[])
{
/* define a map */
std::map _map;
/* insert */
_map.insert( std::map::value_type(0, 32.8) );
_map.insert( std::map::value_type(1, 33.2) );
_map.insert( std::map::value_type(2, 35.8) );
_map.insert( std::map::value_type(3, 36.4) );
_map.insert( std::map::value_type(4, 37.8) );
_map.insert( std::map::value_type(5, 35.8) );
/* 这个是常用的一种map赋值方法 */
_map[7] = 245.3;
/* find by key */
std::map::iterator itr;
itr = _map.find(4);
if( itr != _map.end() )
{
std::cout << "Item:" << itr->first << " found, content: " << itr->second << std::endl;
}
std::cout << std::endl;
/* delete item from map */
if( itr != _map.end() )
{
_map.erase(itr);
}
/* travel through a map */
std::map::iterator itr1 = _map.begin();
for( ; itr1 != _map.end(); ++itr1 )
{
std::cout << "Item:" << itr1->first << ", content: " << itr1->second << std::endl;
}
std::cout << std::endl;
/* empty a map */
_map.clear();
return 0;
}
(三) 当Key是结构时该如何定义结构
比如 Key是结构MyStruct类型, 此时map可以定义如下:
std::map > _map;
其中Compare 缺省是std::less,这里可以不写,自定义的结构必须实现Compare指定的比较操作,因此自定义结构
MyStruct必须按照如下写法:
struct MyStruct
{
int key;
bool operator < ( const MyStruct rhs) const
{
return key < rhs.key;
}
};
当然也可以实现全局operator <
bool operator < ( const MyStruct lhs, const MyStruct rhs)
{
return lhs.key < rhs.key;
}
另外,当Compare 是std::greater时,需要实现 operator >
(四) 如何实现两个Key的map, 只有两个Key都匹配才命中目标
可以定义结构MyStruct如下:
struct MyStruct
{
int key1;
double key2
bool operator < ( const MyStruct rhs) const
{
/* 两个key必须都匹配才命中 */
return ( key1 < rhs.key1 || key2 < rhs.key2 );
}
};
(五) 如何实现两个Key的map, 两个Key中任意一个匹配就命中目标
可以定义结构MyStruct如下:
struct MyStruct
{
int key1;
double key2
bool operator < ( const MyStruct rhs) const
{
/* 两个key任意一个匹配就命中 */
return ( ( key1 < rhs.key1 || (key1 > rhs.key1 && key2 < rhs.key2 ) ) && ( key2 < rhs.key2 ) );
}
};
(六) 如果被存储的T允许重复,可用multimap
(七) 如果Key本身就是需要被存储的T, 只要将map换成set就好了
发表评论
-
Berkeley DB 使用经验总结
2012-08-27 14:41 3083作者:陈磊 NoSQL是现在互联网Web2.0时代备受 ... -
嵌入式数据库系统Berkeley DB
2012-08-27 14:37 1527前言 UNIX/LINUX平台下的数据库种类非常多 ... -
C语言中标准输入流、标准输出流、标准错误输出流
2011-06-13 14:32 9278C语言中标准输入流、标准输出流、标准错误输出流 在 ... -
Rsync 实现原理
2011-05-12 20:06 8314Rsync 实现原理 前言 关于rsync的原始文档 ... -
c++简单的虚函数测试
2011-04-27 14:25 1013#include <iostream> u ... -
C++文件行查找
2011-04-26 14:10 1399#include <iostream> # ... -
c++偏特化简单示例
2011-04-13 11:17 2151c++偏特化 // temp1.c ... -
GDB调试精粹及使用实例
2011-03-16 14:06 1134GDB调试精粹及使用实例 一:列文件清单 1. ... -
简单的ini文件解析
2011-02-12 16:36 1612int GetKeyVal(const string s ... -
scanf族函数高级用法
2011-01-25 16:00 2551如何解释 fscanf(fd,&quo ... -
使用scons替代makefile(1)
2011-01-25 11:58 3723早在多年前我刚开始接触linux下的C程序时,经常被makef ... -
使用scons替代makefile(2)
2011-01-25 11:57 3576本篇文章接着上一篇进一步介绍scons的使用方法,主要介绍静态 ... -
使用scons替代makefile(3)
2011-01-25 11:55 4818在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序 ... -
C 支持动态添加测试数据的测试代码
2011-01-13 17:22 1115/下面的定义为了支持可扩增。 //当需要增加一个新的测试用列 ... -
Linux下Makefile的automake生成
2010-12-28 16:55 1094******************helloworld.c* ... -
SCons笔记(详细版)
2010-12-23 16:11 104991. 基本使用 SConstruct文件就功能而言相当于Ma ... -
scons 学习
2010-12-23 11:14 2176scons 学习 作者:Sam(甄峰) sam_code@h ... -
scons随笔
2010-12-22 20:20 4701scons随笔 Scons是新一代的软件构件工具,或者说ma ... -
Scons在linux下的安装和使用
2010-12-21 11:59 3277因为正在用的一个开源软件需要的Developm ... -
排列组合的实现
2010-12-20 12:41 1056简单算法: 从前往后(或者从后往前)每次交换一个位置。当存在 ...
相关推荐
11. **map的其他方法** - `count(key)`:返回给定键在map中出现的次数(对于map来说总是1或0)。 - `lower_bound(key)`:返回第一个大于或等于给定键的元素的迭代器。 - `upper_bound(key)`:返回第一个大于给定键...
STL(Standard Template Library,...熟练掌握`map`的用法,能极大地提升C++编程的效率和代码质量。通过了解插入、查找、更新、删除等基本操作以及遍历和查找辅助函数,开发者可以充分利用`map`的特性来解决实际问题。
本文将深入解析STL中的`map`用法,帮助你理解其基本概念、操作和应用场景。 1. **map的基本概念** `map`是一个关联容器,它按照键的排序来组织元素。每个元素都是一个键值对,其中键是唯一的,而对应的值可以重复...
Windbg是一款强大的Windows调试工具,由Microsoft开发,广泛用于软件调试、内存分析和故障排查。在处理复杂的系统问题时,尤其是对于C++程序中...如果你经常需要处理这类问题,强烈建议学习并掌握这个插件的使用方法。
下面将详细介绍STL中`map`的使用方法。 ### 1. `map`的基本概念 `map`是一个红黑树实现的关联容器,它的每个元素都是一个键值对(key-value pair)。键通常用来唯一标识元素,而值则是与键相关联的数据。`map`保证...
### VC STL map 使用方法详解:添加,查找,删除 在C++编程中,`map`容器是标准模板库(STL)中一个非常强大的数据结构,用于存储键值对,其中键是唯一的,且默认情况下按照键的升序排列。在Visual C++ (VC) 编译...
`stlmap2.dsp`和`stlmap2.dsw`是Visual Studio的项目文件,用于组织和管理源代码;`a.cpp`可能包含了实际的STL map测试代码;而`.opt`, `.plg`, `.ncb`等文件则是VS的工作区设置和编译过程中的中间文件。 在项目`a....
本文将深入探讨`map`的用法,包括基本操作、与其他容器的比较以及一些实用技巧。 1. **基本概念** `map`是一个有序的键值对集合,其内部实现通常基于红黑树。这保证了插入、查找和删除等操作的时间复杂度为O(log n...
实现统计一段文章的每个单词的个数...其中CountDemo使用STL中的Map来实现的 CountDemo2是用一般语言实现,没有用到STL实现的; MapCount是用STL中的Vector和Map共同实现的 此题目是学习STL中的Map和Vector必练的经典题目
`STLmap.cpp`可能是主代码文件,而`StdAfx.h`包含预编译头,`STLmap.dsp`和`STLmap.dsw`是项目文件,用于在Visual Studio中管理项目。其他文件如`.ncb`(IntelliSense数据库)、`.opt`(编译选项)和`.plg`(编译...
在这个“STL中map用法详解”的压缩包中,我们可以期待深入学习如何利用`map`来处理数据。 `map`容器的主要特点: 1. **键值唯一性**:在`map`中,每一个键都是唯一的,如果尝试插入重复的键,原有的键值对将被新...
在这个压缩包中,我们找到了与STL中map容器相关的实例,以及可能包含的一些关于内存管理的"jjalloc"相关内容。 STL是C++语言中的一个核心组件,它提供了高效的数据结构和算法,如vector、list、set、map等。其中,...
STL中map用法详解[整理].pdf
本篇文章将详细探讨STL中的四个常用组件:`vector`、`map`、`set`以及排序算法`sort`的用法。 1. `vector`: `vector`是STL中最基本的动态数组,它允许在运行时动态增加或减少元素。`vector`提供了许多便利的方法...
在STL中,`map`是一个关联容器,它存储键值对,并且通过键来唯一确定每个元素的位置。键通常是唯一的,而对应的值可以重复。`map`内部使用红黑树(Red-Black Tree)算法来实现,保证了操作的时间复杂度在O(log n)...
总结来说,`map`是C++ STL中的一个强大工具,用于管理键值对数据。了解并熟练掌握它的操作,能极大地提升你在编程中的效率和代码质量。通过不断的练习和实践,你将能够自如地运用`map`解决各种问题。
例如,vector使用动态数组,list使用双向链表,set和map使用自平衡二叉查找树(如红黑树)。 2. 迭代器的实现:迭代器的实现通常包括了对不同容器类型的适配,以及对前向、双向和随机访问迭代器的支持。 3. 算法的...
在C++编程语言中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了许多高效的数据结构和算法。...通过文档“Map容器的用法(STL).doc”可以更深入地学习`map`的高级用法和技巧。
本实例将详细讲解STL中常见的容器和算法的使用方法,帮助初学者深入理解并掌握STL的强大功能。 首先,我们来看STL中的容器: 1. **Map**: Map是一种关联容器,它按照键值(key)进行排序,并存储键值对(key-value...