STL map

 

map

定义

template <class Key, class Value>
std::map<Key, Value> m;

增加

插入

m.insert(make_pair(key, value))

添加

m[key] = value

获取

取值

m[key]

查询

查找 key 是否存在, 若iterator 指向end() 即不存在

std::map<T, V>::iteraotr it;

it.find(key)

遍历

  • 示例, 遍历map
// 方法1
for(auto it = m.begin(); it != m.end(); it++) {
    // it->first, it->second;
}

// 方法2
for (auto &[k, v] : m) {
    // k, v
}
#include <iostream>
#include <map>

int main(void) {
    std::map<std::string, int32_t> m = { {"Wang", 20}, {"Li", 22}, {"Deng", 19} };
    for (auto &[k, v] : m) {
        std::cout << k << ", " << v << std::endl;
    }
    return 0;
}

删除

删除键值对

template <class T, class V>
std::map<T, V> m;

// 删除键为key的键值对
m.erase(key)

unordered_map

std::unordered_map是一种关联容器, 提供基于哈希表的数据结构, 可快速地进行键值对插入、删除、查找操作

与std::map相比, std::unordered_map中元素无序, 因为它使用哈希表来存储元素, 而非树结构

定义

// 定义一个键类型为std::string, 值类型为int的unordered_map
std::unordered_map<std::string, int> m; 

插入

  • 示例, 使用operator[]插入或更新元素
// 插入键值对 ("apple", 2)
m["apple"] = 2;

// 插入键值对 ("banana", 3)
m["banana"] = 3;
  • 示例, 使用insert方法插入元素
// 插入键值对 ("orange", 4)
m.insert({"orange", 4}); 

获取

访问

  • 示例, 使用operator[]访问元素(若键不存在, 会创建一个默认值)
// 访问键为 "apple" 的值, 输出 2
int count = m["apple"]; 
  • 示例, 使用at方法访问元素(若键不存在, 会抛出异常)
try {
    int count = m.at("banana");
    std::cout << "banana count: " << count << std::endl;
} catch (const std::out_of_range& e) {
    std::cout << "Key not found" << std::endl;
}

查找

  • 示例, 使用find方法查找元素(返回迭代器)
auto it = m.find("orange");
if (it != m.end()) {
    std::cout << "found orange with count: " << it->second << std::endl;
} else {
    std::cout << "orange not found" << std::endl;
}

查询

  • 示例, 使用count方法检查键是否存在(返回 0 表示不存在, 1 表示存在)
if (m.count("banana") > 0) {
    std::cout << "banana is in the map" << std::endl;
} else {
    std::cout << "banana is not in the map" << std::endl;
}

遍历

for (const auto& [k, v] : fruit_count) {
    std::cout << "Key: " << k << ", Value: " << v << std::endl;
}

删除

  • 示例, 使用erase方法删除指定键元素
// 删除键为 "apple" 的元素
m.erase("apple"); 
  • 示例, 使用clear方法删除所有元素
m.clear();