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;
}    
原文地址:https://www.cnblogs.com/chusiyong/p/12850131.html