C++学习之路之容器(map-有序不相同)

C++学习之路之容器(map)-有序(元素不允许相同)

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

using namespace std;

int main(){
    std::map<int, string> data;
    std::map<int, string> data1;
    map<double, std::pair<int, string>> path;
	path.emplace(0.1, std::make_pair(12, "shuju"));//插入数据

    //赋值
    data.insert(pair<int, string>(1,"Jim"));
    data.insert(map<int, string>::value_type(2, "Tom"));
    data[3] = "Jerry";
    data[4] = "Arm";
    // data.insert_or_assign(1,"Arm");//键值相同,其内容替换  C++17
    // 使用 pair 的移动构造函数
    data.emplace(std::make_pair(5, std::string("a")));
    // 使用 pair 的转换移动构造函数
    data.emplace(std::make_pair(6, "abcd"));
    // 使用 pair 的模板构造函数
    data.emplace(7, "ddd");
    // data.try_emplace(7, "ddd");若键不存在则原位插入,若键存在则不做任何事 C++17

    //元素访问
    string value = data.at(1);
    string value1 = data[1];

    //迭代器
    map<int, string>::iterator it = data.begin();
    map<int, string>::iterator it = data.end();
    map<int, string>::const_iterator it = data.cbegin();
    map<int, string>::const_iterator it = data.cend();
    map<int, string>::reverse_iterator it = data.rbegin();
    map<int, string>::reverse_iterator it = data.rend();
    map<int, string>::const_reverse_iterator it = data.crbegin();
    map<int, string>::const_reverse_iterator it = data.crend();

    //容量
    data.empty();
    data.size();
    data.max_size();

    //删除
    data1.erase(1);
    // data1.erase(data1.begin(),data1.end());
    //返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只 能是1 or 0)

    //迭代
    map<int, string>::iterator it = data.begin();
    while(it != data.end()){
        cout<< "data " << it->first << "  " << it->second<< endl;
        it++;
    }
    cout<< "---------------"<< endl;
    for(auto item = data.rbegin();item!=data.rend();item++){
        cout<< "data " << item->first << "  " << item->second<< endl;
    }
    cout<< "---------------"<< endl;
    for(auto item = data.begin();item != data.end();item++){
        cout<< "data " << item->first << "  " << item->second<< endl;
    }
   
    cout<< "---------------"<< endl;
    for(size_t i = 1;i<data1.size()+1;i++){//注意角标
        cout<< "data1 " << i << "  " << data1[i]<< endl;
    }
    //交换
    data.swap(data1);

    data1.count(3);//返回匹配特定键的元素数量
    //查找一个元素
    auto iter = data1.find(2);  //如果查找map中没有的元素,则会显示错误;段错误 (核心已转储)
    cout<< "data1.find() " << iter->first << "  "<< iter->second<< endl;
    //返回可以容纳的最大元素个数
    // cout<< "data1.find() " << *data1.find("Arm")<< endl;
    //返回比较元素value的函数
    // data1.value_comp();
    //返回比较元素key的函数
    // data1.key_comp();
    //返回特殊条目的迭代器对
    // data1.equal_range();
    //返回map的配置器
    // data1.get_allocator();
    //返回键值>=给定元素的第一个位置
    // data1.lower_bound();
    //返回键值>给定元素的第一个位置
    // data1.upper_bound();
    // data1.cend();
    return 0;
}   

编译:g++ map.cpp -o map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.小墨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值