• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
reLeetCode 热题 100-1 两数之和-哈希表

image

 1暴力拆解

image

 

image

 

image

 

 

image

 

image

 

扩展

image

 

image

image

 

image

 

 

2.1 unordered_map

 

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    // 创建 unordered_map
    std::unordered_map<std::string, int> umap;
    
    // 插入元素
    umap["Alice"] = 25;
    umap["Bob"] = 30;
    umap.insert({"Charlie", 35});
    
    // 访问元素
    std::cout << "Alice's age: " << umap["Alice"] << std::endl;
    
    // 检查元素是否存在
    if (umap.find("David") == umap.end()) {
        std::cout << "David not found" << std::endl;
    }
    
    // 遍历
    for (const auto& pair : umap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    
    // 删除元素
    umap.erase("Bob");
    
    return 0;
}

  

2.2 unordered_set

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> uset = {1, 2, 3, 4, 5};
    
    // 插入元素
    uset.insert(6);
    
    // 查找元素
    if (uset.find(3) != uset.end()) {
        std::cout << "3 found" << std::endl;
    }
    
    // 遍历
    for (const auto& elem : uset) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

  

unordered_multimap(允许重复键的哈希表)

 

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::unordered_multimap<std::string, int> scores;
    
    // 插入重复键
    scores.insert({"Alice", 90});
    scores.insert({"Bob", 85});
    scores.insert({"Alice", 95});
    scores.insert({"Alice", 88});
    
    std::cout << "All scores (unordered):" << std::endl;
    for (const auto& pair : scores) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    
    // 计数
    std::cout << "\nNumber of Alice's scores: " 
              << scores.count("Alice") << std::endl;
    
    return 0;
}

  

 

 

map(基于红黑树的有序映射)

 

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

int main() {
    std::map<std::string, int> ageMap;
    
    // 插入元素(自动按键排序)
    ageMap["Charlie"] = 35;
    ageMap["Alice"] = 25;
    ageMap["Bob"] = 30;
    
    // 遍历(按字母顺序输出)
    std::cout << "Map elements (sorted by key):" << std::endl;
    for (const auto& pair : ageMap) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    // 输出: Alice:25, Bob:30, Charlie:35
    
    // 范围查询
    auto it_low = ageMap.lower_bound("B");
    auto it_high = ageMap.upper_bound("C");
    std::cout << "\nNames starting with B or C:" << std::endl;
    for (auto it = it_low; it != it_high; ++it) {
        std::cout << it->first << " ";
    }
    
    return 0;
}

  

multimap(允许重复键的有序映射)

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

int main() {
    std::multimap<std::string, int> scores;
    
    // 插入重复键
    scores.insert({"Alice", 90});
    scores.insert({"Bob", 85});
    scores.insert({"Alice", 95}); // 允许重复键
    scores.insert({"Alice", 88});
    
    std::cout << "All scores (sorted by name):" << std::endl;
    for (const auto& pair : scores) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    
    // 查找某个键的所有值
    std::cout << "\nAlice's scores:" << std::endl;
    auto range = scores.equal_range("Alice");
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << it->second << " ";
    }
    
    return 0;
}

  

 

posted on 2025-09-09 17:03  MKT-porter  阅读(5)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3