c++中如何关联两个变量的值-键值对,c++map的使用
来源:互联网 发布:天刀淘宝代购怎么赚钱 编辑:程序博客网 时间:2024/06/07 16:22
在开发的场景中会用到将无关的值关联起来,后面会根据一个值来查询、使用其相对应的值,这里键值对是一个不错的选择,即使用c++map的特性实现这一简单功能。
map是一类关联式容器,增加和删除节点对迭代器的影响很小。除了对操作节点有影响,对其他的节点没有什么影响。map主要建立了key到value的映射。key和value可以是任意类型。
注意:对于迭代器来说,可以修改实值,而不能修改key。
根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次。
快速插入Key - Value 记录。
快速删除记录
根据Key 修改value记录。
遍历所有记录。
使用过程:
#include <map>
map<key,value> key-first, value-second
为了使用方便,可以对模板类进行一下类型定义,
typedef map<int, CString> DEFINEMAP;
DEFINEMAP myMap;
插入map元素:
改变map中的条目非常简单,因为map类已经对[]操作符进行了重载
myMap[1] = "One";
myMap[2] = "Two";
这样非常直观,但存在一个性能的问题。插入2时,先在myMap中查找主键为2的项,没发现,然后将一个新的对象插入myMap,键是2,值是一个空字符串,插入完成后,将字符串赋为"Two"; 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。我们可以用以下方法来避免开销:
myMap.insert(map<int, CString> :: value_type(2, "Two"))
查找并获取map中的元素
下标操作符给出了获得一个值的最简单方法:
CString tmp = enumMap[2];
但是,只有当map中有这个键的实例时才对,否则会自动插入一个实例,值为初始化值。
查找函数:Find(key)和Count()。
begin()和end()两个成员,分别代表map对象中第一个条目和最后一个条目,这两个数据的类型是iterator
int nFindKey = 2; //要查找的Key
//定义一个条目变量(实际是指针)
myMap::iterator it= enumMap.find(nFindKey);
if(it == enumMap.end()) {
//没找到
}
else {
//找到
}
通过map对象的方法获取的iterator数据类型是一个std::pair对象。
iterator包括两个数据 iterator->first 和 iterator->second 分别代表关键字key和存储的数据value。
从map中删除元素
移除某个map中某个条目用erase(),注意参数是条目iterator
该成员方法的定义如下
iterator erase(iterator it):通过一个条目it对象删除
iterator erase(iterator first, iterator last):删除一个范围 [first,end]里面的元素
size_type erase(const Key& key):通过关键字key删除
clear():删除所有元素
map的基本操作函数:
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<string,CAgent>::iterator iter;
for(iter = m_AgentClients.begin(); iter != m_AgentClients.end(); ++iter)
{
if(iter->first=="8001" {
this->SendMsg(iter->second.pSocket,strMsg);//iter->first
}
}//查找:
map<string,CAgent>::iterator iter=m_AgentClients.find(strAgentName);
if(iter!=m_AgentClients.end())//有重名的 {
}
else //没有{
}//元素的个数
if (m_AgentClients.size()==0)
//删除
map<string,CAgent>::iterator iter=m_AgentClients.find(pSocket->GetName());
if(iter!=m_AgentClients.end())
{m_AgentClients.erase(iter);//列表移除
}
#include <iostream>#include <map>#include <string>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(){char tmp[32]="";map<string, string> mapS;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 there elements"<<endl;cout<<"----------------------"<<endl;iter=mapS.find("192.168.200.33");//查找 cout<<"查找"<<endl; if(iter!=mapS.end()){cout<<"find the element"<<endl;cout<<"it is:"<<iter->second<<endl;}else{cout<<"not find the element"<<endl;}//遍历cout<<"遍历"<<endl; for(iter=mapS.begin();iter!=mapS.end();iter++){cout<<"| "<<iter->first<<" | "<<iter->second<<" |"<<endl;} //删除cout<<"删除"<<endl; iter=mapS.find("192.168.200.33");if(iter!=mapS.end()){cout<<"find the element"<<endl;cout<<"delete the element"<<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;} return 0;}
- c++中如何关联两个变量的值-键值对,c++map的使用
- c#Dictionary键值对的使用
- MAP中删除所有vlaue值相同的键值对
- C中不使用临时变量交换两个变量的值
- C中不使用临时变量交换两个变量的值
- C实现键值对(Map功能)
- C实现的简单键值对
- C++map遍历删除数据(删除被2整除的键值对)
- .Net 在WinForm控件ComboBox的Items中使用非数据关联的键值对数据
- C语言中交换两个变量的值
- 黑马程序员------C语言中交换两个变量的值
- 使用C语言指针交换两个变量的值
- A.c 和B.c两个c文件中使用了两个相同名字的static变量
- A.c 和B.c两个c文件中使用了两个相同名字的static变量
- [c语言笔记]关于指针操作中使用异或交换两个变量的值
- C 交换两个整形变量的值
- C语言-交换两个变量的值
- C语言交换两个变量的值
- Google Dremel数据模型详解
- 【已解决】Python运行Queue报错ImportError: cannot import name 'Empty'
- 解决Apache和IIS无法同时使用的问题
- web--前端之js代码7
- 设计模式(3)--代理模式
- c++中如何关联两个变量的值-键值对,c++map的使用
- 7.搭建Spring单元测试环境
- pytorch系列1之 预备
- 自学总结 5
- Java中Synchronized的用法
- V型知识库
- Android 音视频开发入门指南
- Django框架架构总览
- ART深入浅出(7)