>>>C++STL容器学习总结之一:向量vector<<<
>>> C++STL容器学习总结之二:链表list<<<
>>>C++STL容器学习总结之三:双端队列deque<<<
>>>C++STL容器学习总结之四:队列queue<<<
>>>C++STL容器学习总结之五:优先队列priority_queue<<<
>>>C++STL容器学习总结之六:栈stack<<<
>>>C++STL容器学习总结之七:集合set<<<
Map是键-值对的集合,map中的所有元素都是pair,可以使用键作为下标来获取一个值。Map中所有元素都会根据元素的值自动被排序,同时拥有实值value和键值key,pair的第一元素被视为键值,第二元素被视为实值,同时map不允许两个元素有相同的键值。
mapmapstring; mapmapint;
mapmapstring; map< char ,string>mapchar;
mapmapchar; mapmapint;
给map容器添加元素可通过两种方式实现:
- 通过insert成员函数实现。
- 通过下标操作符获取元素,然后给获取的元素赋值。 map对象的访问可通过下标和迭代器两种方式实现:
- map的下标是键,返回的是特定键所关联的值。
- 使用迭代器访问,iter->first指向元素的键,iter->second指向键对应的值。 使用下标访问map容器与使用下标访问vector的行为截然不同:用下标访问map中不存在的元素将导致在map容器中添加一个新的元素,这个元素的键即为该下标值,键所对应的值为空。
如:
map maplive;
1.maplive.insert(pair(102,"aclive"));
2.maplive.insert(map::value_type(321,"hai"));
3, maplive[112]="April"; /map中最简单最常用的插入添加!
find()函数返回一个迭代器指向键值(就是键,值在这里叫做实值)为key的元素,如果没找到就返回指向map尾部的迭代器。
map::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<
如果删除112;
map::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include
运行结果
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include
C++ Maps是一种关联式容器,包含“关键字/值”对
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的函数
对于map容器,使用其下标行为一次访问一系列的相同类型的元素,则可以将这个过程理解为构造了这些元素的一个哈希表,以统计输入单词的出现次数为例:
map word_count;
string word;
while(cin>>word)
++word_count[word]; // 相当于生成了一个哈希表word_count
简单的说,就是键(本例中为string)会被作为数组的下标,值(本例中为int)则为该下标所对应的数组元素的值