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. 华为网关交换机开启DHCP server服务

    华为网关交换机可以配置基于全局地址池的DHCP服务器,也可以配置基于接口地址池的DHCP服务器,本人比较倾向于配置基于接口地址池的DHCP服务器,因此在这里只介绍后者. 第一步:开启DHCP功能 [S ...

  2. POJ1185 [NOI2001] 炮兵阵地 (状压DP)

    又是一道有合法性检测的状压题. dp[i][j][k]表示第i行状态为j,i-1行状态为k时前i行放置的最大数量. 注意22行统计二进制数中1的个数时的巧妙方法. 1 #include<cstd ...

  3. Java学习之路:流程控制

    2022-10-11 10:58:41 前言 本文开始流程控制方面的学习,主要包括用户交互和流程控制语句,适合新手学习. 1 用户交互Scanner 1.1 Scanner对象 Java提供了一个可以 ...

  4. 原生JavaScript

    原生JavaScript 为了方便查看. 所有的js和css代码都是嵌入式直接写在html代码中 1.js的引入方式 <!DOCTYPE html> <html lang=" ...

  5. Linux中CentOS 7的安装及Linux常用命令

    1. 前言 什么是Linux Linux是一套免费使用和自由传播的操作系统.说到操作系统,大家比较熟知的应该就是Windows和MacOS操作系统,我们今天所学习的Linux也是一款操作系统. 为什么 ...

  6. uoj131【NOI2015】品酒大会

    题目链接 很容易想到p和q"r相似"就等价于在后缀数组中q与p之间的height值\(\ge r\),也就是说\(<r\)的那些height值会把排好序后的后缀分割成若干段, ...

  7. python导包

    我们将完成特定功能的代码块放在一个.py结尾的文件中,这个文件被称为模块.在这个模块中可能包含变量,函数,类等等内容. 当我们从外部需要用到这个模块时,就需要将这个模块导入到我们当前环境.导入方式有以 ...

  8. 十、Pod的init containers

    Pod 的 init Containers Pod 我们可以分为两类,一种属于自主式 Pod ,还有一种属于控制器管理的 Pod . 一.Pod 的 initContainers 基本概念: ​Pod ...

  9. CH58X服务修改

    在对ble系列应用时,很多时候拿手机充当主机.在使用ble 调试助手时常会用到write.read.notify等功能.有时可能会根据自己的需求对这些服务进行修改.下图是官方例程体现出的service ...

  10. 如何正确遵守 Python 代码规范

    前言 无规矩不成方圆,代码亦是如此,本篇文章将会介绍一些自己做项目时遵守的较为常用的 Python 代码规范. 命名 大小写 模块名写法: module_name 包名写法: package_name ...