map和set增删查改

1.增添元素

(1)insert增加元素的四种形式

numCountMap.insert({numName,thisAddTime});
numCountMap.insert(make_pair(numName,thisAddTime));
numCountMap.insert(pair<int,int>(numName,thisAddTime));
numCountMap.insert(map<int,int>::value_type(numName,thisAddTime));
 
 
  • 1
  • 2
  • 3
  • 4

(2)插入规则 
注意,map包含不重复的关键字,此例子中关键字是numName, 
因此插入一个已经存在的元素对容器没有影响. 
如对于关键字1插入两次,即调用以下代码

numCountMap.insert({1,1});
numCountMap.insert({1,2});
 
 
  • 1
  • 2

会发现容器中的pair元素的值为{1,1},第二次插入对容器没有影响. 
(3)insert返回值 
此例insert返回值是

  pair<map<int,int>::iterator,bool> 
 
 
  • 1

insert返回值是pair 
pair 的first成员是迭代器,指向具有给定关键字的元素,second成员是一个bool值,指出元素是插入成功还是已经存在于容器中.如果关键字存在于容器中,insert什么都不做,且返回值中的bool 部分为false; 
(4)插入注意 
map 中使用一个不存在的关键字作为下标时会插入一个给定关键字的元素 
因此如下也可以插入元素

numCountMap[numName]thisAddTime
 
 
  • 1

2.遍历

遍历使用迭代器遍历,有两种形式,c++11使用auto 作为迭代器,如下

   //2.1 way one
    for(map<int,int>::iterator it=numCountMap.begin() ;it!=numCountMap.end();it++)
    {
        cout<<it->first<<" occurs "<<it->second<<" times"<<endl;
    }
    //2.1 way two ,c++11 useage
    for(const auto &it : numCountMap)
    {
        cout<<it.first<<" occurs "<<it.second<<" times"<<endl;
    }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.查找

由于map 中使用一个不存在的关键字作为下标时会插入一个给定关键字的元素,因此查找是否有某个元素一定要使用find方法,否则使用下标操作会插入一个新元素.

    map<int,int>::iterator it=numCountMap.find(alterNum);
 
 
  • 1

find 返回一个迭代器,如果查找失败会返回end()元素,否则成功

4.删除

erase的返回值总是0和1,若返回0,表示删除的元素不在map中

int eraseReturn=numCountMap.erase(1);
 
 
  • 1

5 修改和访问

由于map 中使用一个不存在的关键字作为下标时会插入一个给定关键字的元素 
因此修改元素的时候不直接用下标操作 
通过先查找得到指向元素的迭代器, 然后直接赋值 
如下例子

    int alterNum=3;
    map<int,int>::iterator alterit=numCountMap.find(alterNum);
    if(alterit!=numCountMap.end())
    {
        alterit->second=6;
        cout<<"alter num 3 occurs 6 time"<<endl;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值