C++ map的PC蛋蛋平台搭建基本操作和用法

PC蛋蛋平台搭建Q1446595067

1、map简介

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

2、map的功能

自动建立Key - value的对应。key 和 value可以是任意你需要的类型。
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。
快速插入Key - Value 记录。
快速删除记录
根据Key 修改value记录。
遍历所有记录。
3、使用map

使用map得包含map类所在的头文件

#include <map> //注意,STL头文件没有扩展名.h

map对象是模板类,需要关键字和存储对象两个模板参数:

std:map<int, string> personnel;

这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.

为了使用方便,可以对模板类进行一下类型定义,

typedef map<int, CString> UDT_MAP_INT_CSTRING;

UDT_MAP_INT_CSTRING enumMap;

4、在map中插入元素

改变map中的条目非常简单,因为map类已经对[]操作符进行了重载

enumMap[1] = “One”;

enumMap[2] = “Two”;

…..

这样非常直观,但存在一个性能的问题。插入2时,先在enumMap中查找主键为2的项,没发现,然后将一个新的对象插入enumMap,键是2,值是一个空字符串,插入完成后,将字符串赋为”Two”; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:

enumMap.insert(map<int, CString> :: value_type(2, “Two”))

5、查找并获取map中的元素

下标操作符给出了获得一个值的最简单方法:

CString tmp = enumMap[2];

但是,只有当map中有这个键的实例时才对,否则会自动插入一个实例,值为初始化值。

我们可以使用Find()和Count()方法来发现一个键是否存在。

查找map中是否包含某个关键字条目用find()方法,传入的参数是要查找的key,在这里需要提到的是begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator.

int nFindKey = 2; //要查找的Key

//定义一个条目变量(实际是指针)

UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);

if(it == enumMap.end()) {

//没找到

}

else {

//找到

}

通过map对象的方法获取的iterator数据类型是一个std::pair对象,包括两个数据 iterator->first 和 iterator->second 分别代表关键字和存储的数据

6、从map中删除元素

移除某个map中某个条目用erase()

该成员方法的定义如下

iterator erase(iterator it); //通过一个条目对象删除
iterator erase(iterator first, iterator last); //删除一个范围
size_type erase(const Key& key); //通过关键字删除
clear()就相当于 enumMap.erase(enumMap.begin(), enumMap.end());

C++ STL map的使用

以下是对C++中STL map的插入,查找,遍历及删除的例子:

#include <map>
#include <string>
include <iostream>

using namespace std;

void map_insert(map < string, string > *mapStudent, string index, string x)
{
mapStudent->insert(map < string, string >::value_type(index, x));
}

int main(int argc, char **argv)
{
char tmp[32] = “”;
map < string, string > mapS;

//insert element
map_insert(&mapS, “192.168.0.128”, “xiong”);
map_insert(&mapS, “192.168.200.3”, “feng”);
map_insert(&mapS, “192.168.200.33”, “xiongfeng”);

map < string, string >::iterator iter;

cout << “We Have Third Element:” << endl;
cout << “—————————–” << endl;

//find element
iter = mapS.find(“192.168.0.33”);
if (iter != mapS.end()) {
cout << “find the elememt” << endl;
cout << “It is:” << iter->second << endl;
} else {
cout << “not find the element” << endl;
}

//see element
for (iter = mapS.begin(); iter != mapS.end(); iter ) {

cout << “| ” << iter->first << ” | ” << iter->
second << ” |” << endl;

}
cout << “—————————–” << endl;

map_insert(&mapS, “192.168.30.23”, “xf”);

cout << “After We Insert One Element:” << endl;
cout << “—————————–” << endl;
for (iter = mapS.begin(); iter != mapS.end(); iter ) {

cout << “| ” << iter->first << ” | ” << iter->
second << ” |” << endl;
}

cout << “—————————–” << endl;

//delete element
iter = mapS.find(“192.168.200.33”);
if (iter != mapS.end()) {
cout << “find the element:” << iter->first << endl;
cout << “delete element:” << iter->first << endl;
cout << “=================================” << endl;
mapS.erase(iter);
} else {
cout << “not find the element” << endl;
}
for (iter = mapS.begin(); iter != mapS.end(); iter ) {

cout << “| ” << iter->first << ” | ” << iter->
second << ” |” << endl;

}
cout << “=================================” << endl;

return 0;
}

原文地址:http://blog.51cto.com/13875918/2146243

时间: 2024-10-05 08:16:57

C++ map的PC蛋蛋平台搭建基本操作和用法的相关文章

初识java2 进制PC蛋蛋平台搭建转换 数据类型 运算符

进制PC蛋蛋平台搭建论坛:haozbbs.com Q1446595067二进制:0~1,满二进一,以0b开头作为标识八进制:0~7,满八进一,以0作为标识十进制:0~9,慢10进一,十六进制:0~9,A~F,满十六进一,以0x开头作为标识,F+1=0x10进制之间的转换十进制转换成二进制:不断除以2取余,然后将余数倒排二进制转换为十进制:从低位次起,按位次成以2的位次次幂,然后求和二进制转换为八进制:从低位次起,没三位化为一组,产生一位八进制数字,最高不足 三位,补足0,三位以内,按二进制向十进

ApplicationContext获取pc蛋蛋平台租用搭建

在pc蛋蛋平台租用搭建(企 娥:217 1793 408)项目中,经常遇到这样的问题:有些类需要使用new来创建对象,但是类中需要使用spring容器中定义的bean,此时无法通过spring的自动注入来注入我们需要使用的bean.所以需要手动的从spring容器中获取bean.要获取bean必须先获取到ApplicationContext对象,以下就是该获取方式 工具类实现ApplicationContextAware接口,并重写setApplicationContext(Applicatio

PC蛋蛋APP搭建加拿大开发北京全系列28APP开发H5定制加拿大28源码,,幸运飞艇定制开发

2019最新八合一程序完美源码.包搭建,包安装,包维护,一条龙服务,让你省心省力. 目前 正在运营,全网独家支持在线充值和在线兑换!让您无需人工操作! 市面上只出售月租版,我们直接提供源码供您无限搭建,永久使用,提供售后 需要提供服务器和域名和微信公众服务号! 没有公众服务号可以找我代买, 本源码用于学习和研究,请勿用于其他非法行为,如有违法一切后果自己承担 客服微信:baozicmshm 原文地址:https://www.cnblogs.com/baozicms/p/10785644.html

Retrofit2.0使用PC蛋蛋源码搭建姊妹篇——带进度下载文件

Retrofit是PC蛋蛋源码搭建 dsluntan.com 目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期.最近项目中遇到了下载视频和图片文件的需求(还有上传视频和图片的需求,请移步这篇博客),我第一反应是用retrofit做呀,so easy!产品接着说,要带下载进度条哦!我一想,retrofit好像并没有给我们提供显示下载进度的接口,哎呀,看来还是得自己个儿整整喽!接下来,我把自己实现Retrofit带进度下载文件的流程分享给大家.在de

PC蛋蛋 app软件开发, bj28 H5框架搭建,加拿大28系统定制

移动互联网和pc蛋蛋软件开发,pc蛋蛋app开发时代的来临,可以说使整个人类世界站在了一个新时代的前沿.移动互联网时代在为人们的生活带来更加便捷.丰富和流畅的信息体验的同时,也加快了人们的工作.生活节奏,并在无形中改变了人们早已习惯了几个世纪的信息获取方式和决策方式.毫不夸张地说,移动互联网正在改变一切,而且这种改变不可逆转.这些改变既增加了互联网营销的难度,也为其带来了前所未有的机遇,下面就跟随移动互联网营销的脚步去了解一下到底什么是移动互联网营销,开启你的移动互联网营销之旅. Pc蛋蛋软件开

背景建模技术(一):介绍、资源下载、“背景建模库”平台搭建

背景建模技术(一):介绍.资源下载."背景建模库"平台搭建 1.介绍 视频分析与理解是一个非常活跃的研究领域,在这个研究领域(如视频监控.多媒体应用等)中,第一步要做的就是检测场景中运动的目标.而背景建模技术是检测前景最常用的技术之一,具有举足轻重的作用和研究意义. 2.资源下载 BgsLibrary的下载:BgsLibrary库 OpenCV的下载:http://opencv.org/  (推荐下载版本2.4.10) 注:PC默认已经安装VS2010. 3."背景建模库&q

Wince6.0应用开发:一、平台搭建

由于需要参加一个比赛,于是就接触了WinCE6.0的应用开发,可是所看到的资料大部分都是关于WinCE6.0系统的开发,或者在系统之上的驱动开发.像我这种只在WinCE6.0上利用厂商提供的类库进行应用开发的真实伤不起. 下面介绍开发环境: 我的自己的系统是WIN7的系统 其实假如你和我一样的话只开发应用的话,其实根本不需要按照网上那样下差不多4G的东西.需要做的是, 一.装个vs2008(记得包含智能设备开发这一项,vs2010是不支持智能设备开发的.当然你也可以选择vs2005,这随便你.v

[Openwrt 项目开发笔记]:Openwrt平台搭建(一)

最近开始着手进行Openwrt平台的物联网网关设计,思路有些乱,通过笔记的方式进行记录和整理. 声明: 在本文中,有些内容摘自网上,我进行了整合,因此出处不明,在此对原文作者致歉! -----------------------------------------------------(分割线)------------------------------------------------------- 一. 选择Openwrt平台的理由 传统的路由器固件是由官方提供的.这些固件是不开源的,而

h5牛牛平台搭建中小型棋牌类网络游戏服务端架构

h5牛牛平台搭建相关教程:http://h5.mostsheng.com 相关联系方式:QQ1279829431电联17061863554 用Golang实现基础架构逻辑后,准备再次谈谈我的想法. 已实现的逻辑与前文描述有几点不同: 1. Gateway更名为Proxy,DBProxy更名为DB 2. Proxy同时持有与(Login, Game)不同类型服务器的多条连接 3. DB不参与负载均衡,考虑是棋牌数据库负载不高,即使需要扩展多个也可以通过不同服务器配置指向不同的DB来扩展 4. 消息