1暴力拆解
扩展
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; }