unordered_map是C++标准库中的一种关联容器,它提供了快速的查找、插入和删除操作,适用于需要快速查找的场景。与map不同,unordered_map不保持元素的顺序,因此它的插入、删除和查找操作的时间复杂度为O(1)。
以下是unordered_map的一些基本用法示例:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<std::string, int> um; // 插入元素
um["apple"] = 1;
um["banana"] = 2;
um["orange"] = 3;
// 查找元素
if (um.find("banana") != um.end())
{ std::cout << "Found banana: " << um["banana"] << std::endl; }
// 删除元素 um.erase("orange");
// 遍历元素 for (const auto& pair : um) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0; }
输出结果为:
Found
banana: 2
apple: 1
banana: 2
在上面的示例中,我们首先创建了一个unordered_map对象,然后使用[]运算符插入了一些键值对。使用find()函数可以查找一个键是否存在,如果存在,返回一个指向该键值对的迭代器;使用erase()函数可以删除一个键值对。最后,使用for循环遍历unordered_map中的键值对,并打印出每个键和对应的值。
unordered_map和map都是C++标准库中的关联容器,它们的主要区别在于有序性和插入、删除操作的效率。
map中的元素是按照键的顺序进行排序的,因此在进行插入、删除操作时需要维护元素的顺序,时间复杂度为O(log n)。而unordered_map中的元素是无序的,插入、删除操作的效率更高,时间复杂度为O(1)。
下面是一个示例,展示了如何使用unordered_map和map来存储和查找学生和他们的成绩:
#include <iostream>
#include <unordered_map>
#include <map>
struct Student {
std::string name;
int score;
};
int main() {
// 使用 unordered_map 存储学生信息
std::unordered_map<std::string, Student> um;
// 插入元素
um["Alice"].name = "Alice";
um["Alice"].score = 90;
um["Bob"].name = "Bob";
um["Bob"].score = 85;
um["Charlie"].name = "Charlie";
um["Charlie"].score = 95;
// 查找元素
if (um.find("Alice") != um.end()) {
std::cout << "Found Alice: " << um["Alice"].score << std::endl;
}
// 使用 map 存储学生信息
std::map<std::string, Student> m;
// 插入元素
m["Alice"].name = "Alice";
m["Alice"].score = 90;
m["Bob"].name = "Bob";
m["Bob"].score = 85;
m["Charlie"].name = "Charlie";
m["Charlie"].score = 95;
// 查找元素
if (m.find("Alice") != m.end()) {
std::cout << "Found Alice: " << m["Alice"].score << std::endl;
}
return 0;
}
在上面的示例中,我们定义了一个Student结构体,用于存储学生的名字和成绩。首先,我们使用unordered_map来存储学生信息,并使用[]运算符插入了一些键值对。使用find()函数可以查找一个键是否存在,如果存在,返回一个指向该键值对的迭代器。然后,我们使用map来存储学生信息,插入和查找操作与unordered_map类似。由于map中的元素是有序的,因此可以通过键的顺序进行快速查找。