3.9 map/ multimap容器

 

高效率:快速从大量数据中找到你想要的数据

所有元素在插入时会根据key值自动排序

 

#include<iostream>
#include<map>
using namespace std;

void printMap(const map<int, int>& m)
{
    for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key: " << (*it).first << "  value: " << (*it).second << endl;
    }
    cout << endl;
    // *it是一个pair
}

// map容器 构造和赋值
void test01()
{
    map<int, int> m; // 创建map
    m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组
    m.insert(pair<int, int>(3, 30));
    m.insert(pair<int, int>(2, 20));

    printMap(m);

    // 拷贝构造
    map<int, int> m2(m);
    printMap(m2);

    // 赋值
    map<int, int> m3;
    m3 = m2;
    printMap(m3);
}
int main()
{
    test01();
    return 0;
}

别的没啥难度,但是插入数据得注意是对组

map中所有数据都是对组!

 

#include<iostream>
#include<map>
using namespace std;

void printMap(const map<int, int>& m)
{
    for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key: " << (*it).first << "  value: " << (*it).second << endl;
    }
    cout << endl;
    // *it是一个pair
}
// map容器 大小 是否为空 和交换
void test01()
{
    map<int, int> m; // 创建map
    m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组
    m.insert(pair<int, int>(3, 30));
    m.insert(pair<int, int>(2, 20));

    cout << m.size() << endl;

    cout << m.empty() << endl;

    map<int, int> m2;
    m2.insert(pair<int, int>(4, 40));
    m.swap(m2);
    printMap(m);
}
int main()
{
    test01();
    return 0;
}

 

#include<iostream>
#include<map>
using namespace std;

void printMap(const map<int, int>& m)
{
    for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key: " << (*it).first << "  value: " << (*it).second << endl;
    }
    cout << endl;
    // *it是一个pair
}
// map容器 插入和删除
void test01()
{
    map<int, int> m; // 创建map
    m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组
    m.insert(make_pair(2, 20)); // 这种更简洁
    m.insert(map<int, int>::value_type(3, 30));// 这种忽略,没必要记
    m[4] = 40; // 这种简单,但是如果插错了,会给你创建一个,中括号不建议插入,可以利用key来访问value
    // 方便查找
    printMap(m);

    // 删除
    m.erase(m.begin()); // 删除,传入一个迭代器
    m.erase(3); // 传入key值,按照key去删除,如果传入的key没有,不会删除任何
    m.erase(m.begin(), m.end()); // 相当于清空
    m.clear(); // 清空方法
}
int main()
{
    test01();
    return 0;
}

 

返回的是迭代器 如果结果不是.end(),就说明找到了

count返回的是键值为key的数据数量,为int类型

map容器不允许插入重复的元素,所以对于count,结果要么是0要么是1

multimap可能会大于1

 

#include<iostream>
#include<map>
using namespace std;

class myCompare
{
public:
    bool operator()(int v1, int v2)
    {
        return v1 > v2;
    }
};

void printMap(map<int, int, myCompare>& m)
{
    for (map<int, int, myCompare>::iterator it = m.begin(); it != m.end(); it++)
    {
        cout << "key: " << it->first << "  value: " << (*it).second << endl;
    }
    cout << endl;
    // *it是一个pair
}
// map容器 排序
void test01()
{
    map<int, int, myCompare> m; // 创建map
    m.insert(make_pair(1, 10)); // 这种更简洁
    m.insert(make_pair(2, 20));
    m.insert(make_pair(3, 30));
    m.insert(make_pair(4, 40));
    printMap(m);
}
int main()
{
    test01();
    return 0;
}

 

posted @ 2021-01-22 23:23  不妨不妨,来日方长  阅读(67)  评论(0编辑  收藏  举报