map容器:键值和实值是分开的,排序规则按照键值排序

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<map>
#include<string>
using namespace std; template<class T>
void printMap(T &m){
for (map<int, string>::iterator it = m.begin(); it != m.end(); ++it){
cout << "key:" << it->first << " value:" << it->second << endl;
}
} //注意:map的排序规则,传入的参数不是pair类型,而是key类型
struct mycompare{
bool operator()(int key1, int key2){
return key1 > key2;
}
}; //1. map容器的使用
void test01(){
//map是否支持随机访问?不支持随机访问,双向迭代器 //创建map容器
map<int, string, mycompare> mymap; //1. 第一种插入方式
mymap.insert(pair<int,string>(3,"aaa"));
//2. 第二种插入方式
mymap.insert(make_pair(6, "bbb"));
//3. 第三种插入方式
mymap.insert(map<int,string>::value_type(2,"ccc"));
//4. 第四种插入方式
mymap[4] = "ddd";
mymap[4] = "eee"; mymap.erase(2); printMap(mymap); //cout << "size:" << mymap.size() << endl;
//如果使用[]号这种方式输出一个不存在的key的值,那么编译器会以指定key增加新的数据
//如果使用[]号方式插入一条key存在的数据,那么已有数据会被修改
//cout << mymap[100] << endl;
//cout << "size:" << mymap.size() << endl;
} //3. map查找操作
/*
find(key);//查找键key是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回map.end();
count(keyElem);//返回容器中key为keyElem的对组个数。对map来说,要么是0,要么是1。对multimap来说,值可能大于1。
lower_bound(keyElem);//返回第一个key>=keyElem元素的迭代器。
upper_bound(keyElem);//返回第一个key>keyElem元素的迭代器。
equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。
*/ void test02(){ map<int, string> mymap;
mymap.insert(make_pair(1, "aaa"));
mymap.insert(make_pair(2, "bbb"));
mymap.insert(make_pair(3, "ccc"));
mymap.insert(make_pair(4, "ddd"));
mymap.insert(make_pair(5, "eee")); map<int, string>::iterator it = mymap.find(30);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} it = mymap.lower_bound(3);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} it = mymap.upper_bound(3);
if (it == mymap.end()){
cout << "查找失败!" << endl;
}
else{
cout << "Key:" << it->first << " Value:" << it->second << endl;
} pair<map<int, string>::iterator, map<int, string>::iterator> ret = mymap.equal_range(3);
if (ret.first != mymap.end()){
cout << "Key:" << ret.first->first << " Value:" << ret.first->second << endl;
}
if (ret.second != mymap.end()){
cout << "Key:" << ret.second->first << " Value:" << ret.second->second << endl;
} } int main(){ //test01();
test02(); system("pause");
return EXIT_SUCCESS;
}

map容器案例:员工分组案例

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<ctime>
using namespace std; //公司今天招聘了5个员工,5名员工进入公司之后,需要指派员工在那个部门工作
//人员信息有: 姓名 年龄 电话 工资等组成
//通过Multimap进行信息的插入 保存 显示
//分部门显示员工信息 显示全部员工信息 #define SALE_DEPATMENT 1 //销售部门
#define DEVELOP_DEPATMENT 2 //研发部门
#define FINACIAL_DEPATMENT 3 //财务部门 class Woker{
public:
string mName;
int mAge;
int mSalary;
}; //创建员工
void CreateWorkers(vector<Woker> &vWorkers){ srand((unsigned int)time(NULL)); string nameSeed = "ABCDE";
for (int i = 0; i < 5;i ++){
Woker worker;
worker.mName = "员工";
worker.mName += nameSeed[i];
worker.mAge = rand() % 30 + 30;
worker.mSalary = rand() % 10000 + 10000;
vWorkers.push_back(worker);
} }
//员工分组
void WokerByGroup(vector<Woker> &vWorkers, multimap<int, Woker> &mWokers){ //遍历员工
for (vector<Woker>::iterator it = vWorkers.begin(); it != vWorkers.end(); ++it){ int departmentID = rand() % 3 + 1;
//员工保存在分组之后容器中
mWokers.insert(make_pair(departmentID,*it));
} } void Group(multimap<int, Woker> &mWokers, int depID){ multimap<int, Woker>::iterator it = mWokers.find(depID);
int mcount = mWokers.count(depID);
int index = 0;
for (; it != mWokers.end() && index < mcount; ++it, ++index){
cout << "Name:" << it->second.mName << " Age:" << it->second.mAge << " Salary:" << it->second.mSalary << "美刀!" << endl;
}
}
//打印各组员工信息
void PrintWorkers(multimap<int, Woker> &mWokers){ cout << "财务部门员工信息如下:" << endl;
Group(mWokers, FINACIAL_DEPATMENT);
cout << "研发部门员工信息如下:" << endl;
Group(mWokers, DEVELOP_DEPATMENT);
cout << "销售部门员工信息如下:" << endl;
Group(mWokers, SALE_DEPATMENT);
} int main(){ vector<Woker> vWorkers;// 保存未分组的员工信息
multimap<int, Woker> mWokers; //保存分组后的员工信息 CreateWorkers(vWorkers);
WokerByGroup(vWorkers, mWokers);
PrintWorkers(mWokers); system("pause");
return EXIT_SUCCESS;
}

STL map容器常用API的更多相关文章

  1. 详解C++ STL map 容器

    详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...

  2. C++ STL map容器值为指针时怎么释放内存

    最近在使用STL中map时,遇到了一个问题,就是当map中值为指针对象时怎么释放内存? // 站点与TCP连接映射表 (key为ip_port_stationCode, value为 clientSo ...

  3. STL --> map容器

    map容器 一.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 二.ma ...

  4. stl map容器 学习

    #include<map> 1.map的声明: map<string,int>map_1; map_1 就是一个string对int的映射. 2.map的用法(映射): map ...

  5. c++ STL map容器成员函数

    map容器用于查找,设置键值和元素值,输入键值,就能得到元素值.map对象中的元素时刻都是有序的,除非无序插入的.它是用平衡树创建的.查找很快. 函数 描述,注意有r的地方都是不能用it代替的. ma ...

  6. C++STL库中map容器常用应用

    #include<iostream> #include<cstdio> #include<map> //按键值大小构成二叉搜索树 using namespace s ...

  7. C++ STL map容器的说明测试1

    // maptest.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" /*********************************** ...

  8. 2.9 C++STL map/multimap容器详解

    文章目录 2.9.1 引入 2.9.2 代码示例 map案列 multimap案列 2.9.3 代码运行结果 总结 2.9.1 引入 map相对于set区别,map具有键值和实值,所有元素根据键值自动 ...

  9. 2.3 C++STL vector容器详解

    文章目录 2.3.1 引入 2.3.2 代码实例 2.3.3 运行结果 总结 2.3.1 引入 vector 容器 动态数组 可变数组 vector容器 单口容器(尾部操作效率高) vector动态增 ...

  10. 2.4 C++STL deque容器详解

    文章目录 2.4.1 引入 2.4.2 代码示例 2.4.3 代码运行结果 2.4.4 具体案例 总结 2.4.1 引入 deque容器类比vector容器来学习. deque为双向开口容器,见下图. ...

随机推荐

  1. 2020-2021 Winter Petrozavodsk Camp, Belarusian SU Contest (XXI Open Cup, Grand Prix of Belarus) 题解

    题目列表 C. Brave Seekers of Unicorns D. Bank Security Unification G. Biological Software Utilities I. B ...

  2. 从 Paxos 到 ZooKeeper

    分布式一致性 分布式文件系统.缓存系统和数据库等大型分布式存储系统中,分布式一致性都是一个重要的问题. 什么是分布式一致性?分布式一致性分为哪些类型?分布式系统达到一致性后将会是一个什么样的状态? 如 ...

  3. C#中Math.Round()实现中国式四舍五入问题

    C#中的Math.Round()并不是使用的"四舍五入"法.实际上是四舍六入五取偶. 对于这个问题我们常见的解决方式是使用MidpointRounding.AwayFromZero ...

  4. GMOJ5673 爬山法 题解

    Solution 显然先想到处理出每个点能看到的最高的顶点. 然后考虑模拟题目的过程,一段一段走时间复杂度显然不够优秀. 考虑我们要求什么,我们需要求出\(u\)到\(v\)的最近的一个点,使得这个点 ...

  5. linux操作系统运行一个java程序并外网访问

    (一)安装jdk 1.新建文档java  : mkdir java 2.进入java并且下载jdk     下载jdk : wget --no-check-certificate --no-cooki ...

  6. 『现学现忘』Git分支 — 39、Git中分支与对象的关系

    目录 1.Git对象之间的关系 2.提交对象与分支的关系 (1)提交对象与分支的关系 (2)分支说明 (3)HEAD与分支的关系 1.Git对象之间的关系 我们之前学了Git的三个对象:提交对象.树对 ...

  7. c++算法竞赛常用板子集合(持续更新)

    前言 本文主要包含算法竞赛一些常用的板子,码风可能不是太好,还请见谅. 后续会继续补充没有的板子.当然我太菜了有些可能写不出来T^T 稍微有些分类但不多,原谅我QwQ 建议 Ctrl + F 以快速查 ...

  8. JSP Webshell免杀设计

    JSP Webshell免杀设计 @author:drag0nf1y 介绍 什么是Webshell? 被服务端解析执行的php.jsp文件 什么是RCE? remote command execute ...

  9. JAVA开发搞了一年多的大数据,究竟干了点啥

    JAVA开发搞了一年多大数据的总结 ​ 2021年7月份加入了当前项目组,以一个原汁原味的Java开发工程师的身份进来的,来了没多久,项目组唯一一名大数据开发工程师要离职了,一时间一大堆的数据需求急需 ...

  10. Halcon使用MeasurePos来实现检测边缘点

    (1)为了提高性能,测量句柄只需要初始化一次: 参数:测量矩形的中心点行坐标,测量矩形中心的列坐标,测量矩形的角度,测量矩形的宽,测量矩形的高,待处理图像的宽,待处理图像的高,使用的算法,输出测量句柄 ...