STL容器 -- Map

核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序.

头文件: #include <map>

拓展: multimap 是一个多重映照容器,键值可以重复.unordered_set 是一个内部不排序的映射容器,需包含头文件<unordered_map>

构造方法:

map<int, string> kvm; //构造一个键为 int 型, 值为 string 型的 map 

元素的插入:

kvm[1] = "abc";   // 值 "abc" 在 map 中的键值为 1                                                           ------方法1
kvm.insert (map<int, string> :: value_type(2, "def")); // 值 "def" 在 map 中的键值为 2         ------方法2

利用 find 查找:

map<int, string> :: iterator it;//定义迭代器
it = kvm.find(2);  //find 只能根据键查找,且find函数返回的是迭代器.
if (it == kvm.end())  cout << "Not Found" <<endl;
else cout << it->first << " " << it->second << endl; //利用 first 和 second 访问键 和 值.

利用 count 查找:

int cnt = kvm.count(2);  //count 按照查找的 键 返回找到的个数.由于不重复即只能返回 0 或 1

根据键访问值:

string ss = kvm[1]  //map 根据要访问的 "键" 返回 "键对应的值", 需要用 find 或者 count 判断 "键" 是否存在

map 的删除:

it = kvm.find(1);
kvm.erase(it);    //利用 find 找到键为 1的位置, 再通过迭代器删除元素          ---------方法1
kvm.erase(1)     //删除键为 1 的元素, 成功返回 ”1“ 否则返回 ”0“           ---------方法2
kvm.erase( kvm.begin(), kvm.end() );    //通过迭代器区间性删除, 区间为前闭后开   ---------方法3

常用操作:

kvm.clear()        //清空 map
kvm.empty()    //判断 map 是否为空
kvm.size()        //返回 map 中元素的个数

其他查找函数:

map<int, string> :: it;
it = lower_bound(key);   //返回键值 大于等于 给定键值的第一个位置
it = upper_bound(key);  //返回键值    大于     给定键值的第一个位置

结构体类型的构造:

struct NODE{
    int x; int y;
    bool operator < (const NODE& a) const{
        if(x == a.x) return y > a.y;//二级排序为 y 的降序
        return x < a.x; //以及排序为 x 的升序
    }
};
map<NODE, string> kvm; //必须重载结构体的 “<" 

map 的遍历:

map<int, string>::iterator it;
for(it = kvm.begin(); it != kvm.end(); it++) {
    cout << it -> first  << "   " << it -> second << endl;
}
时间: 2025-01-05 18:27:26

STL容器 -- Map的相关文章

STL容器----map与set

map和set的都是关联容器,底层实现都是红黑树 一.map映射 存储键值对 实例化时需要传递两个类型 一个键key的类型 另外一个是值value类型 key唯一 相同的key只会存在一条记录 key有序 插入指定位置 遍历时 有序 (1)插入 pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE> &val ); pair<KEY_TYPE,VALUE_TYPE>(key,value); 创建一

GEEK学习笔记— —STL容器map和multimap

简介 在头文件<map> 中定义 namespace std { template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key,T> > > class map; template <typename Key, typename T, typename Compare = less

STL - 容器 - Map(二)

把Map用作关联式数组 MapAdvanceTest.cpp #include <map> #include <string> #include <iostream> #include <iomanip> #include "MapAdvanceTest.h" #include "../../Core/ContainerUtil.h" using namespace std; void MapAdvanceTest::

83.Remove Duplicates from Sorted List(删除链表重复元素,STL容器map)

Given a sorted linked list, delete all duplicates such that each elementappear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. HideTags Linked List #pragma once #include<iostream> #

137.Single Number II(法1排序法2STL容器map哈希法3位运算法4改进的位运算)

Given an array of integers, every element appears three timesexcept for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement itwithout using extra memory? HideTags Bit Manipulation #pragma once

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map

STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map   list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [unordered_multimap]     contiguous storage double-ended queue LIFO FIFO 1st is greatest  

STL容器——对map排序

STL容器(三)——对map排序 对于map的排序问题,主要分为两部分:根据key排序:根据value排序.下面我们就分别说一下~ 1. 根据key进行排序 map默认按照key进行升序排序 ,和输入的顺序无关.如果是int/double等数值型为key,那么就按照大小排列:如果是string类型,那么就按照字符串的字典序进行排列~ (还记得之前说过的字典序吗?当时我们用到了next_permutation这个库函数!)下面我们展示一个例子,说明map中默认按照key升序排列 的情况. Exam

STL中map与hash_map容器的选择

[转]STL中map与hash_map容器的选择 先看看alvin_lee 朋友做的解析,我觉得还是很正确的,从算法角度阐述了他们之间的问题! 实际上这个问题不光C++会遇到,其他所有语言的标准容器的实现及选择上都是要考虑的.做应用程序你可能觉得影响不大,但是写算法或者核心代码就要小心了.今天改进代码,顺便又来温习基础功课了. 还记得Herb Sutter那极有味道的<C++对话系列>么,在其中<产生真正的hash对象>这个故事里就讲了map的选择.顺便回顾一下,也讲一下我在实用中

STL之map容器的详解

一.关于map的介绍 map是STL的 一个容器,和set一样,map也是一种关联式容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键 字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据.这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的.学习map我们一定要理解什么是一对一的数据映射?比如:一个班级中,每个学生的学号跟他的姓名