231讲 map容器
内容纲要

map容器

file

map构造和赋值

功能描述:

  • 对map 容器进行构造和赋值操作

函数原型:

构造:

  • map<T1,T2> mp; //map默认构造函数;
  • map(const map &mp); //拷贝构造函数

赋值:

  • map& operator=(const map &mp); //重载等号操作符
void test()
{
    map<int, string> mp1;
    pair<int, string> p1(1, "张三");
    pair<int, string> p2;
    p2 = make_pair(2, 97);
    //pair<int, string> p3 = make_pair(2, 97);  会报错,不存在int ---> string转换 
    // 但是上面拆开来创建就不会有问题。

    //map容器的插入
    mp1.insert(pair<int, string>(3, "张麻子"));
    mp1.insert(p1);
    mp1.insert(p2);

    printMap(mp1);

    map<int, string> mp2;
    //map的赋值
    mp2 = mp1;  

}

Summary:

map中所有元素都是成对出现,插入数据时一定要使用对组

map大小和交换。

file

map插入和删除

file

======================================================

  • 《注意看,眼前的这个现象叫自动确定键值对》,~当string在int类型前面的时候 它也依旧会依据int 来进行排序 ~。md我记错了,,不是根据value的值来排序,,下面这个图是根据拼音来排序的吧。。。。

file

例证

file

============================================

  • 尽量不要用mp1[100] = 10000; 这种方式插入对组,因为哪怕是打印输出cout << mp1[200]; 的时候,它都会创建key 为200 ,value为0 的值。 如下图。

file

#include <iostream>
#include <map>

using namespace std;

void printMap(const map<int,string> &mp) 
{
    for (map<int,string>::const_iterator it = mp.begin();it != mp.end();it++)
    {
        cout << " it->first:  " << it->first << "    it->second:  " << it->second << endl;
    }
}

void printMap(const map<int, int>& mp)
{
    for (map<int, int>::const_iterator it = mp.begin();it != mp.end();it++)
    {
        cout << " it->first:  " << it->first << "   \t it->second:  " << it->second << endl;
    }
}

//map容器插入和删除
void test01()
{
    map<int, string> mp1;
    //插入
    //第一种
    mp1.insert(pair<int, string>(18, "张三"));

    //第二种
    mp1.insert(make_pair(20, "李四"));

    //第三种
    mp1.insert(map<int, string>::value_type(19, "王五"));

    //第四种   不常用,容易出问题。
    mp1[16] = "赵六";

    printMap(mp1);

    map<string, int> mp2;
    mp2["老崔"] = 40;
    mp2.insert(pair<string, int>("麦克", 45));
    mp2.insert(make_pair("富兰克林", 25));

    map<string, int>::iterator it = mp2.begin();
    //printMap();
    for (map<string,int>::iterator it = mp2.begin();it != mp2.end();it++)
    {
        cout << " mp2.first = " << (*it).first << "\t mp2.second" << (*it).second << endl;
    }
}

void test02()
{
    map<int, int> mp3;
    //插入
//第一种
    mp3.insert(pair<int, int>(5, 50));

    //第二种
    mp3.insert(make_pair(2, 20));

    //第三种
    mp3.insert(map<int, int>::value_type(3, 30));

    //第四种   不常用,容易出问题。
    mp3[100] = 10000;

    printMap(mp3);

    //当这里用mp3[200] 来查找key 为200的对组时,它会自动插入key为200 且value为0 的map
    cout << mp3[200] << endl; 
    printMap(mp3);
}

void main()
{
    test02();
}

map查找和统计

功能描述:

  • 对map 容器进行查找数据以及统计数据

函数原型:

  • find(key); //查找key 是否存在,若存在,返回该键的元素的迭代器;若不存在,返回 map.end();
  • count(key); //统计key的元素个数

map不允许插入重复key 元素,count统计而言,结果要么为0 要么为1;

multimap 的count统计可能大于1

Summary:

  • find --- 返回是一个迭代器
  • count 对于map 容器 要么是0,要么是1
#include <iostream>
#include<map>

using namespace std;

class myCompare {
public:
    //注意形参列表后面一定要const 否则报错
    bool operator()(int v1, int v2) const {

        return v1 > v2;
    }
};

// 这里的map 模板可以加myCompare,不加其实也行。
void printMap(const map<int, string,myCompare>& mp)
{
    for (map<int,string,myCompare>::const_iterator it = mp.begin();it!=mp.end();it++)
    {
        cout << " (*it).first = " << (*it).first << " \t  it->second = " << it->second << endl;
    }
}

void test01()
{
    map<int, string,myCompare> mp1;
    mp1.insert(make_pair(40,"亚瑟摩根"));
    mp1.insert(pair<int, string>(45,"迈卡贝尔"));
    mp1.insert(map<int, string,myCompare>::value_type(30,"莎迪阿德勒"));
    mp1[36] = "查尔斯斯密斯";
    printMap(mp1);

    //这里的map模板 没加 myCompare 也行。
    for (map<int, string>::iterator it = mp1.begin();it != mp1.end();it++)
    {
        cout << " (*it).first = " << (*it).first << " \t  it->second = " << it->second << endl;
    }
}

void main()
{
    test01();
}

Ask:multimap如果有多个key那么返回的迭代器是哪一个呢?返回第一个,但是可以通过count()方法来找到它的区间。

Summary

  • 利用仿函数可以指定 map 容器的排序规则
  • 对于自定义数据类型, map 必须指定排序规则,同set容器。

完结撒花!!!!

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇