map和Multimap:
构造:
Template<class T1, class T2>
map(); // 默认构造函数
map(const map& m) // 拷贝构造函数
map(iterator begin, iterator end ); //区间构造函数
map(iterator begin, iterator end, const traits& _compare) //带比较谓词的构造函数
map(iterator begin, iterator end, const traits& _compare, const allocator& all) //带分配器
方法:
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
插入元素:
1.用insert方法插入pair对象:
enumMap.insert(pair<int, Cstring>(1, “One”));
2.用insert方法插入value_type对象:
enumMap.insert(map<int, Cstring>::value_type (1, “One”));
查找并获取map中元素:
int nFindKey = 2; //要查找的Key
//定义一个条目变量(实际是指针)
UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);
if(it == enumMap.end()) {
cout<<"没找到"<<endl;
}
else {
cout<<"找到了"<<endl;
}
通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据。
iterator->first 关键字(key)
iterator->second 存储的数据(value)
从map中删除元素:
1.iterator erase(iterator it); //通过一个条目对象删除
2.iterator erase(iterator first, iterator last); //删除一个范围
3.size_type erase(const Key& key); //通过关键字删除
4.clear()就相当于 enumMap.erase(enumMap.begin(),enumMap.end());
multimap :(特性)
为了存取 multimap 中的多个值,使用 equal_range()、lower_bound()和 upper_bound()成员函数:
equal_range(k):该函数查找所有与 k 关联的值。返回迭代指针的 pair,它标记开始和结束范围。下面的例子显示所有与键“213.108.96.7”关联的值:
typedef multimap <string, string>::const_iterator CIT;
typedef pair<CIT, CIT> Range;
Range range=dns.equal_range("213.108.96.7");
for(CIT i=range.first; i!=range.second; ++i)
cout << i->second << endl; //output: cpluspluszone.com
// cppzone.com
lower_bound() 和 upper_bound():lower_bound(k) 查找第一个与键 k 关联的值,而 upper_bound(k) 是查找第一个键值比 k 大的元素。下面的例子示范用 upper_bound()来定位第一个其键值大于“213.108.96.7”的元素。通常,当键是一个字符串时,会有一个词典编纂比较:
dns.insert(make_pair("219.108.96.70", "pythonzone.com"));
CIT cit=dns.upper_bound("213.108.96.7");
if (cit!=dns.end()) //found anything?
cout<<cit->second<<endl; //display: pythonzone.com
如果你想显示其后所有的值,可以用下面这样的循环:
dns.insert(make_pair("219.108.96.70","pythonzone.com"));
dns.insert(make_pair("219.108.96.70","python-zone.com"));
// 获得第一个值的迭代指针
CIT cit=dns.upper_bound("213.108.96.7");
// 输出: pythonzone.com,python-zone.com
while(cit!=dns.end())
{
cout<<cit->second<<endl;
++cit;
}
分享到:
相关推荐
c++ vs2019 cpp20规范的STL库的map与multimap源码分析
map/multimap属于**关联式容器**,底层结构是用二叉树实现。
一共四个doc文件,list综合实例、multimap和map的实例、set和multiset的综合实例、vector综合实例
本程序用c++标准库中的快速排序算法以及容器map和multimap实现了对文件中出现频率靠前的单词进行了统计,至于文件大小取决于你机器所剩的内存数,如果文件数据时海量的(上亿)则本程序可能不适合,需要按照海量数据...
vector<string> topKFrequent(vector<string>& words, int k) {//1,建立 map 映射关系,通过 ke
6.6.3 map和multimap运用示例 52 6.6.4 综合示例 55 6.7 其它STL容器 57 6.7.1 HashTable 59 6.7.2 引用计数 59 6.8 各种容器的运用时机 61 6.8.1 各种容器的使用时机 61 7 STL迭代器 64 7.1 迭代器头文件 64 7.2 ...
10.2.9Map和multimap容器 118 10.2.10容器共性机制研究 123 10.2.11其他 124 10.3算法 125 10.3.1算法基础 125 10.3.2STL算法中函数对象和谓词 138 10.3.3常用的遍历算法 148 10.3.4常用的查找算法 152 10.3.5常用的...
第10章 map 和 multimap 23.第10章 set 和 multiset 24.第11章 算法简介 25.第11章 函数对象简介 26.第11章 算法 元素计数 27.第11章 算法 最大值和最小值 28.第11章 算法 查找算法(1) 29.第11章 算法...
标准STL序列容器:vector、string、deque和list。 标准STL关联容器:set、multiset、map和multimap。
用AVL-tree数据结构作为底层机制,以STL底层空间配置器和iterator_traits编程技法实作出一个独立的关联式容器(map, set, multimap, multiset),并对外提供接口实现和STL完全兼容的容器。
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。本文主要总结一下map基本用法和嵌套用法示例。 一、map基本用法 1. 头文件 代码如下:#include <map> 2. 定义 代码...
1-1-10 数组和指针技术的不同......................................... 14 1-2 C++存储技术........................................................ 15 1-2 一I C++存储类型.....................................
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。
概述简单数据类型-具有本机Java和Scala集合支持的Map , Set , Queue , SetMap和MultiMap 。 使用任何纯条件更新-无查询语言。 使用Transaction API进行原子更新和插入。 具有可配置API的非阻塞核心,用于阻塞,非...
多图这是语言缺少的multimap集合(这也是创建适当的库/包的一种简单... 有两种不同的多图实现, slicemultimap和setmultimap ,它们分别具有slice和set作为映射值。 当允许重复的键/值对并且插入顺序很重要时, slic
C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素。 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include <map> #include #include ...
Web Multiple Maps for Csharp
C++使用multimap实现tlv,支持重复tlv。实现代码+Makefile
Map存在或Multimap.Map设置, Multimap会使用Map作为内商店,这意味着对象可以作为重点。 var Multimap = require ( 'multimap' ) ; // if harmony is on /* nothing need to do */ // or if you are using es6-shim...