📅  最后修改于: 2023-12-03 14:39:57.184000             🧑  作者: Mango
在C++中,map和unordered_map都是STL库中的一个关联式容器,可以将键和值作为一个整体进行存储和管理。
map是一个按照键值自动排序的关联式容器,其中每个元素都是一个由键和其对应值组成的键值对。其内部实现采用红黑树,因此查找、插入和删除的时间复杂度都为O(log n)。
以下是map的基本用法:
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> m;
m["apple"] = 2;
m["banana"] = 3;
m["orange"] = 4;
cout << "m[\"apple\"] = " << m["apple"] << endl;
cout << "m[\"banana\"] = " << m["banana"] << endl;
cout << "m[\"orange\"] = " << m["orange"] << endl;
for (auto it : m) {
cout << it.first << ": " << it.second << endl;
}
return 0;
}
上述代码中,我们通过map<string, int>
定义了一个map,其中键为string类型,值为int类型。接下来,我们通过m["apple"] = 2
、m["banana"] = 3
和m["orange"] = 4
向map中插入了三个元素。注意,在map中,如果某个键不存在,访问该键会自动添加一个对应值为默认值(0)的键值对。
接着,我们通过cout << "m[\"apple\"] = " << m["apple"] << endl
、cout << "m[\"banana\"] = " << m["banana"] << endl
和cout << "m[\"orange\"] = " << m["orange"] << endl
输出了map中三个元素的值。
最后,我们通过for (auto it : m)
遍历了整个map并输出其中的每个键值对。其中,it.first
表示当前键值对的键,it.second
表示当前键值对的值。
unordered_map是一个不进行自动排序的关联式容器,其中每个元素都是一个由键和其对应值组成的键值对。其内部实现采用哈希表,因此查找、插入和删除的时间复杂度都为O(1)。但是,由于其内部实现使用了哈希表,因此unordered_map在遍历时可能会比map慢。
以下是unordered_map的基本用法:
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> m;
m["apple"] = 2;
m["banana"] = 3;
m["orange"] = 4;
cout << "m[\"apple\"] = " << m["apple"] << endl;
cout << "m[\"banana\"] = " << m["banana"] << endl;
cout << "m[\"orange\"] = " << m["orange"] << endl;
for (auto it : m) {
cout << it.first << ": " << it.second << endl;
}
return 0;
}
上述代码中,我们通过unordered_map<string, int>
定义了一个unordered_map,其中键为string类型,值为int类型。其余部分与map的基本用法相同,不再赘述。
map和unordered_map都是C++中两个常用的关联式容器,其内部实现分别为红黑树和哈希表。当需要对容器进行频繁的查找、插入和删除操作时,建议使用unordered_map;当需要对容器进行频繁的遍历操作时,建议使用map。当然,在不确定是否需要使用排序时,建议直接使用unordered_map即可。