📜  C++中的map与unordered_map(1)

📅  最后修改于: 2023-12-03 14:39:57.184000             🧑  作者: Mango

C++中的map与unordered_map

在C++中,map和unordered_map都是STL库中的一个关联式容器,可以将键和值作为一个整体进行存储和管理。

map

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"] = 2m["banana"] = 3m["orange"] = 4向map中插入了三个元素。注意,在map中,如果某个键不存在,访问该键会自动添加一个对应值为默认值(0)的键值对。

接着,我们通过cout << "m[\"apple\"] = " << m["apple"] << endlcout << "m[\"banana\"] = " << m["banana"] << endlcout << "m[\"orange\"] = " << m["orange"] << endl输出了map中三个元素的值。

最后,我们通过for (auto it : m)遍历了整个map并输出其中的每个键值对。其中,it.first表示当前键值对的键,it.second表示当前键值对的值。

unordered_map

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即可。