STL - map/multimap容器

map简介

 高性能,高效率

map构造和赋值

#include <algorithm> //算法
#include <iostream>
#include <map>
#include <string>

using namespace std;

// map容器 构造和赋值

void printMap(map<int, int>& m)
{
    for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << endl;
        cout << "value:" << it->second << endl;
    }
}
void test02()
{
    map<int, int> m; // map容器,第一个是索引,第二个是值
    m.insert(pair<int, int>(1, 10)); //插入的时候里面的元素是一个pair匿名队组
    m.insert(pair<int, int>(3, 30)); //按照key值自动排序
    m.insert(pair<int, int>(2, 20));
    printMap(m);
    
    //拷贝构造
    map<int,int>m2(m);
    //赋值
    map<int,int>m3 = m2;
    
}

int main()
{
    test02(); 
}

总结:map中所有的元素都是成对出现,插入数据时要使用对组pair 

map大小和转换

#include <algorithm> //算法
#include <iostream>
#include <map>
#include <string>

using namespace std;

// map容器 构造和赋值

void printMap(map<int, int>& m)
{
    for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << endl;
        cout << "value:" << it->second << endl;
    }
}
void test02()
{
    map<int, int> m; // map容器,第一个是索引,第二个是值
    m.insert(pair<int, int>(1, 10)); //插入的时候里面的元素是一个pair匿名队组
    m.insert(pair<int, int>(3, 30)); //按照key值自动排序
    m.insert(pair<int, int>(2, 20));
    printMap(m);

    cout << "map容器的大小" << m.size() << endl;
    map<int, int> m1;
    m1.insert(pair<int, int>(1, 100));
    m1.insert(pair<int, int>(2, 300));
    m1.insert(pair<int, int>(3, 100));
    printMap(m1);

    m.swap(m1);
    printMap(m1);
    cout << "容器是否为空" << m1.empty() << endl;
}

int main()
{
    test02();
}

 map插入和删除

#include <algorithm> //算法
#include <iostream>
#include <map>
#include <string>

using namespace std;

// map容器 构造和赋值

void printMap(map<int, int>& m)
{
    for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << " ";
        cout << "value:" << it->second << " ";
    }
    cout << endl;
}
void test02()
{
    map<int, int> m; // map容器,第一个是索引,第二个是值
    //插入
    m.insert(pair<int, int>(1, 100)); //插入的时候里面的元素是一个pair匿名队组
    m.insert(make_pair(2, 200));
    // 3
    m.insert(map<int, int>::value_type(3, 300)); //不建议使用,
    // 4
    m[4] = 400; //重载了【】方式 不建议使用,因为会覆盖原值
    cout << m[5] << endl; //查找数据,因为没有5,会插入数据 5 = 0
    cout << m[2] << endl; //【】利用key访问value
    
    printMap(m);
    
    //删除
    m.erase(m.begin());
    printMap(m);
    m.erase(3); //删除key
    printMap(m);
    m.erase(0); //没有数据不删除
    printMap(m);
    m.erase(m.begin(),m.end());
    m.clear(); //清空


    map<int, string> m;
    m[1] = "age";
    m[1] = "fdsa"; // 成功,会改变原来数据的值
    m.insert(pair(1, "fdsa")); //失败
    m.insert(map<int, string>::value_type(1, "fda")); //失败
    cout << m.at(1) << endl;
    cout << m[2] << endl; //容器种的值不存在,会返回空值。

}

int main()
{
    test02();
}

 map查找和统计

#include <algorithm> //算法
#include <iostream>
#include <map>
#include <string>

using namespace std;

// map容器 构造和赋值

void printMap(map<int, int>& m)
{
    for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << " ";
        cout << "value:" << it->second << " ";
    }
    cout << endl;
}
void test02()
{
    map<int, int> m;
    m.insert(make_pair(1, 100));
    m.insert(make_pair(2, 200));
    m.insert(make_pair(3, 300));
    map<int, int>::iterator pos = m.find(10);
    if (pos != m.end()) { //找不到返回end
        cout << "查找" << (*pos).first << " " << (*pos).second << endl;
    } else {
        cout << "查找不到" << (*pos).first << " " << (*pos).second << endl;
    }

    printMap(m);
    //统计
    cout << "元素个数" << m.count(10) << endl;
}

int main()
{
    test02();
}

map容器排序

#include <algorithm> //算法
#include <iostream>
#include <map>
#include <string>

using namespace std;

// map容器 构造和赋值

void printMap(map<int, int>& m)
{
    for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << " ";
        cout << "value:" << it->second << " ";
    }
    cout << endl;
}
class MyCompare {
public: 
    bool operator()(int v1, int v2) const
    {
        //降序
        return v1 > v2;
    }
};
void test02()
{
    map<int, int, MyCompare> m;

    m.insert(make_pair(1, 100));
    m.insert(make_pair(3, 300));
    m.insert(make_pair(2, 200));

    for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++) {
        cout << "index:" << it->first << " ";
        cout << "value:" << it->second << " ";
    }
    cout << endl;
}

int main()
{
    test02();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值