zoukankan      html  css  js  c++  java
  • map基本用法

    map以键值对的形式存储数据,且插入的元素自动排序,底层一般采用红黑树的结构。

    基本用法

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    /*
        insert()        插入元素,当key相同时,插入失败
        [] = xxx        直接插入,key相同就覆盖
        xxx = yyy[]     key存在就获取value并赋值,key不存在就插入,value为0
        
        erase()         删除元素
        
        find()          查找key是否存在
        size()          获取元素个数
        empty()         判断map是否为空
    */
     
    int main()
    {
        map<int, int> m;
        
        m.insert(pair<int, int>(1, 11));
        m.insert(pair<int, int>(3, 33));
        m.insert(pair<int, int>(2, 22));
        
        m[3] = 3333; // 覆盖
        
        for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
        {
            cout << it->first << " : " << it->second << endl;
        }
        
        map<int, int>::iterator it1 = m.find(1);
        if(it1 != m.end())
        {
            cout << "Find" << endl;
        }
        else
        {
            cout << "Not Find" << endl;
        }
        
        m.erase(it1);
        
        for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
        {
            cout << it->first << " : " << it->second << endl;
        }
    
        return 0;
    }    

     []形式访问的坑

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
        map<int, int> m;
        
        m.insert(pair<int, int>(1, 11));
        m.insert(pair<int, int>(3, 33));
        m.insert(pair<int, int>(2, 22));
        
        int v = m[4]; // key为4的数据不存在,因此会自动插入key为4,value为0的数据
        
        for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
        {
            cout << it->first << " : " << it->second << endl;
        }
    
        while(1);
    
        return 0;
    }    

    遍历删除 (不同于vectot和list)

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    int main()
    {
        map<int, int> m;
        
        m.insert(pair<int, int>(1, 11));
        m.insert(pair<int, int>(3, 33));
        m.insert(pair<int, int>(2, 22));
        
        for(map<int, int>::iterator it = m.begin(); it != m.end();)
        {
            if(3 == it->first)
            {
                // m.erase(it); 在执行m.erase(it)之后,it这个iterator已经失效了
                m.erase(it++); // 先把it赋值给一个临时变量传递给erase,然后it自增,就可以指向下一个
            }
            else
            {
                ++it;
            }
        }
        
        for(map<int, int>::iterator it = m.begin(); it != m.end(); ++it)
        {
            cout << it->first << " : " << it->second << endl;
        }
    
        return 0;
    }    
  • 相关阅读:
    新数学丛书《连分数》 习题 1.1
    连分数中一个有意思的小玩意儿
    无聊博文之:用同余的语言阐述欧几里德算法
    有向无环图
    Codeforces Round #658 (Div. 2)
    常用代码模板3——搜索与图论
    什么是动态规划?动态规划的意义是什么?(转自知乎)
    Codeforce:4C. Registration system (映射)
    C++与正则表达式入门
    常用代码模板4——数学知识
  • 原文地址:https://www.cnblogs.com/chusiyong/p/12850131.html
Copyright © 2011-2022 走看看