zoukankan      html  css  js  c++  java
  • map [] 运算符 易出错点

    出错代码:

    #include<bits/stdc++.h>
    using namespace std;
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int>ans;
        map<int,int>mp;
        for(int i=0;i<array.size();i++) mp[array[i]]++;
        for(map<int,int>::iterator it = mp.begin();it!=mp.end();it++) {
                if(mp[sum - it->first] >= (sum == it->first + it->first) + 1) {
                        ans.push_back(it->first),ans.push_back(sum-it->first);
                        break;
                }
        }
        return ans;
    }
    int main() {
        vector<int> a = {1,2,4,7,11,16};
        vector<int> ans = FindNumbersWithSum(a,10);
        if(ans.size()) printf("[%d,%d]
    ",ans[0],ans[1]);
        else printf("[]
    ");
    }
    //结果为[6,4]

    修改后:

    #include<bits/stdc++.h>
    using namespace std;
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int>ans;
        map<int,int>mp;
        for(int i=0;i<array.size();i++) mp[array[i]]++;
        for(map<int,int>::iterator it = mp.begin();it!=mp.end();it++) {
                if(mp.find(sum - it->first)->second >= (sum == it->first + it->first) + 1) {
                        ans.push_back(it->first),ans.push_back(sum-it->first);
                        break;
                }
        }
        return ans;
    }
    int main() {
        vector<int> a = {1,2,4,7,11,16};
        vector<int> ans = FindNumbersWithSum(a,10);
        if(ans.size()) printf("[%d,%d]
    ",ans[0],ans[1]);
        else printf("[]
    ");
    }
    //结果为[]
    mp[sum - it->first] 这样访问时若key为6,但原来没有这个key,则会插入一个数据(6,0)到map中,然后it遍历到6的时候找到了4,输出[6,4]
    但使用
    mp.find(sum - it->first)->second
    不会插入新的数据

    所以有时候就算知道[]运算符在key不存在时会插入数据,但有时候产生的后果是意想不到的,所以只是查找的话尽量用find函数,不要贪图方便
  • 相关阅读:
    iOS 数字滚动 类似于老
    iOS 实现转盘的效果
    iOS 摇一摇的功能
    APP上架证书无效:解决
    iOS--UIAlertView与UIAlertController和UIAlertAction之间的事儿
    ios 获取字符串所需要占用的label的高度
    适配----Autolayout
    OC中 block 的用法
    微信小程序如何播放腾讯视频?
    IOS-UICollectionView
  • 原文地址:https://www.cnblogs.com/cdyboke/p/7783309.html
Copyright © 2011-2022 走看看