STL关联式容器之map和multimap

一,map和multimap的概念

1.map和multimap的基本知识

  • map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。
  • map中key值是唯一的,集合中的元素按照一定的顺序排列,元素插入过程是按照排序规则插入的,不能指定插入位置。
  • map的底层数据结构是红黑树变体的平衡二叉树。在插入和删除操作中比vector要快。
  • map可以直接存取key所对应得value,支持[]操作符,如map[key] = value;
  • multimap和map的区别:map支持唯一的键值对,每个键只能出现一次,而multimap中相同的键可以出现多次,multimap不支持[]操作符。
  • 要使用map必须要引入头文件# include<map>

二,map和multimap的基本操作

1.map和multimap的构造函数

// map的无参构造函数
map<string,string> m1;
// multimap的无参构造函数
multimap<string, string> m2;

2.map的插入操作

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

int main()
{
    // 定义map集合
    map<string, string> m;
    // 插入方式1,返回结果是是否插入成功
    pair<map<string,string>::iterator,bool> p1 = m.insert(pair<string, string>("Epic", "UnrealEngine"));
    // 插入方式2,返回结果是是否插入成功
    pair<map<string, string>::iterator, bool> p2 = m.insert(make_pair("Unity", "Unity3D"));
    // 插入方式3,返回结果是是否插入成功
    pair<map<string, string>::iterator, bool> p3 = m.insert(map<string, string>::value_type("Oracle", "Java"));
    // 插入方式4
    m["nokia"] = "Qt";
    // 插入方式4可以修改值
    m["nokia"] = "NewQt";
    // 遍历
    for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
    {
        cout << it->first << " = " << it->second << endl;
    }

    return 0;
}

3.map的遍历操作

# include<iostream>
# include<map>
# include<string>

using namespace std;

int main()
{
    // 创建映射
    map<string, string> m;

    // 插入元素
    m.insert(make_pair("王刚","张文婧"));
    m.insert(make_pair("吕布", "貂蝉"));
    m.insert(make_pair("刘备", "孙尚香"));

    // 正向遍历
    for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
    {
        cout << it->first << " = " << it->second << endl;
    }

    // 反向遍历
    for (map<string, string>::reverse_iterator it = m.rbegin(); it != m.rend(); it++)
    {
        cout << it->first << " = " << it->second << endl;
    }

    return 0;
}

4.map的删除操作

# include<iostream>
# include<map>
# include<string>

using namespace std;

int main()
{
    // 创建映射
    map<string, string> m;
    // 插入元素
    m.insert(make_pair("刘备1", "孙尚香1"));
    m.insert(make_pair("刘备2", "孙尚香2"));
    m.insert(make_pair("刘备3", "孙尚香3"));
    m.insert(make_pair("刘备4", "孙尚香4"));
    m.insert(make_pair("刘备5", "孙尚香5"));
    // 删除刘备4
    for (map<string, string>::iterator it = m.begin(); it != m.end(); )
    {
        if (it->first == "刘备4")
        {
            it = m.erase(it);
        }
        else {
            it++;
        }
    }
    // 遍历
    for (map<string, string>::iterator it = m.begin(); it != m.end(); it++)
    {
        cout << it->first << " = " << it->second << endl;
    }
    // 获取map的长度
    int size = m.size();
    cout << "size = " << size << endl;
    // 清空map
    m.clear();
    size = m.size();
    cout << "size = " << size << endl;

    return 0;
}

5.map的其他操作

# include<iostream>
# include<map>
# include<string>

using namespace std;

int main()
{
    map<string, string> m;
    /* 插入操作 */
    m.insert(make_pair("aaa", "AAA"));
    m.insert(make_pair("bbb", "BBB"));
    m.insert(make_pair("ccc", "CCC"));
    /* 统计,map的的可能结果为0或者1,multimap的结果是可能多变的 */
    int s = m.count("aaa");
    cout << "s = " << s << endl;
    /* 查找,根据key来查找,返回该key的迭代器 */
    map<string,string>::iterator it = m.find("aaa");
    cout << it->first << " = " << it->second << endl;
    
    return 0;
}

 

posted @ 2017-01-20 17:48  MetalSteel  阅读(539)  评论(0编辑  收藏  举报