
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;
}
浙公网安备 33010602011771号