map/ multimap容器应用

文章介绍了在C++中如何使用头文件和命名空间,特别是关于map容器的运用,包括三种遍历map的方法:迭代器、rangefor循环以及C++17的新特性。同时,列举了map的主要成员方法,并对比了map与multimap的区别。
摘要由CSDN通过智能技术生成

1.使用时添加头文件和命名空间

#include <string>
#include <vector>
#include <map>        // 引入头文件

using std::string;    
using std::vector;
using std::multimap;  // 引入命名空间
using std::pair;      // 例:mUidlist.insert(pair<int, string>(nUid, vData[0])); 需指明类型
using std::make_pair; // 例:mUidlist.insert(make_pair(nUid, vData[0])); 无需指明键值对的类型

2.三种遍历方法

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

int main() {
    map<string, int> mp;
    mp["test1"] = 20;
    mp["test2"] = 18;
    mp["test3"] = 30;

    // 方式一、迭代器
    cout << "方式一、迭代器" << endl;
    for (auto it = mp.begin(); it != mp.end(); it++) {
        cout << it -> first << " " << it -> second << endl;
    }

    // 方式二、range for C++ 11版本及以上
    cout << "\n方法二、 range for" << endl;
    for (auto it : mp) {
        cout << it.first << " " << it.second << endl;
    }

    // 方法三、 C++ 17版本及以上
    cout << "\n方法三" << endl;
    for (auto [key, val] : mp) {
        cout << key  << " " << val << endl;
    }
    
    return 0;
}

3.map容器包含的成员方法

begin()        返回指向map头部的迭代器
clear()        删除所有元素
 count()返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)
 empty()        如果map为空则返回true
 end()          返回指向map末尾的迭代器
equal_range()  返回特殊条目的迭代器对
 erase()        删除一个元素

 find()        

 查找一个元素    

get_allocator()

返回map的配置器   

 insert()        

 插入元素 

 key_comp()    

 返回比较元素

lower_bound()  

返回键值>=给定元素的第一个位置   

 max_size()    

 返回可以容纳的最大元素个数     

rbegin()        

返回一个指向map尾部的逆向迭代器   

 rend()          

返回一个指向map头部的逆向迭代器   

 size()        

 返回map中元素的个数   

 swap()            

 交换两个map 

upper_bound()    

返回键值>给定元素的第一个位置
 value_comp()    返回比较元素value的函数

        

    ps:map和multimap区别

  • map不允许容器中有重复key值元素
  • multimap允许容器中有重复key值元素
C++ STL中的mapmultimap是关联容器,用于存储键值对(key-value pairs),其中每个键(key)唯一对应一个值(value)。 map是一个有序容器,根据键的大小进行自动排序,默认按照键的升序进行排序。每个键只能在map中出现一次,如果尝试插入具有相同键的元素,新元素将替代旧元素。 multimap也是一个有序容器,与map不同的是,它允许多个具有相同键的元素存在。多个具有相同键的元素将按照插入的顺序进行存储,而不会自动排序。 这两个容器都提供了一系列的操作函数,如insert、erase、find等,用于插入、删除和查找元素。 以下是一个使用map的简单示例: ```cpp #include <iostream> #include <map> int main() { std::map<std::string, int> scores; scores.insert(std::make_pair("Alice", 90)); scores.insert(std::make_pair("Bob", 80)); scores.insert(std::make_pair("Charlie", 70)); // 查找并输出Bob的分数 std::cout << "Bob's score: " << scores["Bob"] << std::endl; // 遍历并输出所有键值对 for (const auto& pair : scores) { std::cout << pair.first << ": " << pair.second << std::endl; } return 0; } ``` 上述示例中,我们创建了一个存储string类型键和int类型值的map容器scores。通过insert函数依次插入了三个键值对。然后我们通过scores["Bob"]来获取Bob的分数,并输出结果为80。 接着我们使用范围-based for循环遍历map中的所有键值对,并输出每个键值对的键和值。 multimap的用法与map类似,只是它允许多个具有相同键的元素存在。 这些关联容器在查找和插入操作上具有较高的效率,特别适用于需要根据键进行快速查找的场景。在实际应用中,你可以根据自己的需求选择适合的容器类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值