map使用

#include<iostream>

#include <map>

using namespace std;

 

int main(int argc, char *argv[])

 map<char*, char*> acc;
 map<char*,char*>::iterator ip;
 char sID[10];
 for(int i=0;i<4;i++)
 { 
  cin >> sID;
  if (i > 0)
  {
   cout << "continue" << endl;
   continue;
  }
  acc[sID] = sID; 
 } 
 for(ip = acc.begin(); ip!=acc.end();ip++) 
  cout << (*ip).first << ", " << (*ip).second << endl; return 0;

 return 0;

}

 

输出值为最后一次对sID赋值的值,因为map<char *,char*>存储的是地址,虽然后面3次赋值都没有直接对map操作,但是都对同一地址进行了修改,故从map中读取值的时候,是最后一次对该地址的修改。

 

在map中插入元素

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

testMap[1] = "1";
testMap[2] = "2";
.....

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

testMap.insert(map<int, string> :: value_type(2, "2"))

insert()方法:若插入的元素的键值已经存在于map中,那么插入就会失败,不会修改元素的键对应的值;若键值在map中查不到,那么就会将该新元素加到map中去。

下标[key]方法:若插入元素的键值已经存在于map中,那么会更新该键值对应的值为新的元素的值;若该键值在map中找不到,那么就会新建一个键值为该键(key)的元素,并将key对应的值赋值为默认值(默认构造函数生成的对象)。

 

pair<map<int,string>::iterator,bool > ret = testMap.insert(map<int, string> :: value_type(2, "2"))或

pair<map<int,string>::iterator,bool > ret = testMap.insert(make_pair(2, "2"))返回值,可以判断是否插入成功,且获取成功插入的值。ret.second为true表示插入成功,否则失败,ret.first为一个指向插入元素的迭代器,可以通过该迭代器获取成功插入的值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值