c++ 字典操作

本文介绍了C++STL中的map容器,其特点、使用方法(包括插入、查找、删除和遍历),以及与其类似的unordered_map的区别和操作。
摘要由CSDN通过智能技术生成

c++ 字典操作

map<> 是 C++ STL(标准模板库)中的容器之一,可以看作是一种关联式数组,也称为字典(dictionary)或映射(map)。

在 map<> 中,每个元素都由一个键和一个值组成。其中,键是唯一的,而值则可以重复。它使用红黑树(一种自平衡二叉搜索树)作为内部实现,使得查找、插入、删除等操作的时间复杂度为 O(log n)。

map<> 的声明方式如下:

template < typename Key, typename T, typename Compare = std::less<Key>,
           typename Allocator = std::allocator<std::pair<const Key, T>> >
class map;
/*其中,Key 表示键的数据类型,T 表示值的数据类型, 
Compare 表示比较函数的类型,默认使用 std::less<Key>(即按照键的默认顺序进行比较),
Allocator 表示用于动态分配内存的分配器类型,默认为 std::allocator<std::pair<const Key, T>>。*/

以下是 map<> 的一些常用操作:

  • 插入元素:map.insert(std::make_pair(key, value)) 或 map[key] = value
  • 访问元素:map[key]
  • 删除元素:map.erase(key)
  • 查找元素:map.find(key),返回一个迭代器
  • 遍历元素:使用迭代器 std::map<Key, T>::iterator 或者 auto
#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> myMap;
    myMap.insert(std::make_pair("Alice", 23));
    myMap.insert(std::make_pair("Bob", 18));
    myMap.insert(std::make_pair("Charlie", 31));

    auto it = myMap.find("Alice");
    if (it != myMap.end()) {
        std::cout << "Alice's age is " << it->second << std::endl;
    }

    for (const auto& p : myMap) {
        std::cout << p.first << ": " << p.second << std::endl;
    }

    return 0;
}
/*<<<<<<<<<<<<<<<<
Alice: 25
Bob: 30
Charlie: 35
Bob's age is 30*/
#include <iostream>
#include <unordered_map>
int main() {
    // 创建一个字典
    std::unordered_map<std::string, int> myDict;

    // 插入键值对
    myDict.insert({"Alice", 25});
    myDict.insert({"Bob", 30});

    // 使用索引操作符添加或更新元素
    myDict["Charlie"] = 35;
    myDict["Bob"] = 40; // 根据键更新值

    // 使用迭代器遍历字典
    for (auto it = myDict.begin(); it != myDict.end(); ++it) {
        std::cout << it->first << ": " << it->second << std::endl;
    }

    // 判断字典是否包含某个键
    if (myDict.count("Alice")) {
        std::cout << "Alice's age is " << myDict["Alice"] << std::endl;
    }

    // 删除某个键值对
    myDict.erase("Charlie");

    // 清空整个字典
    myDict.clear();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值