map和unorderd_map的区别和联系

发布时间 2023-12-24 08:35:22作者: He_LiangLiang

map

map是一个有序的关联容器,它存储的元素是键值对(key-value pair),并且按照键的顺序进行排序

map内部使用红黑树实现,这使得它可以在平均情况下实现O(log n)的插入、删除和查找操作。

例如,如果你想存储一些学生的姓名和对应的年龄,并按照年龄从小到大排序,那么map是一个很好的选择。

unordered_map

unordered_map是一个无序的关联容器,它也存储键值对,但是不保证元素的顺序

unordered_map内部使用哈希表实现,这使得它可以在平均情况下实现O(1)的插入、删除和查找操作。

例如,如果你想存储一些单词及其对应的频率,并需要快速地插入、删除和查找操作,那么unordered_map是一个很好的选择。

 

#include <iostream>  
#include <map>  
#include <unordered_map>  
  
int main() {  
    // 使用 map 存储学生信息  
    std::map<int, std::string> students;  
    students[18] = "Alice";  
    students[20] = "Bob";  
    students[19] = "Charlie";  
  
    // 遍历并输出学生信息  
    std::cout << "Students (ordered by age):" << std::endl;  
    for (const auto& pair : students) {  
        std::cout << pair.first << " " << pair.second << std::endl;  
    }  
  
    // 使用 unordered_map 存储单词频率  
    std::unordered_map<std::string, int> wordFrequencies;  
    wordFrequencies["hello"] = 1;  
    wordFrequencies["world"] = 2;  
    wordFrequencies["foo"] = 3;  
  
    // 遍历并输出单词及其频率  
    std::cout << "Word Frequencies (unordered):" << std::endl;  
    for (const auto& pair : wordFrequencies) {  
        std::cout << pair.first << " : " << pair.second << std::endl;  
    }  
  
    return 0;  
}
//  a1.cpp 是这个c++源文件
//  g++ a1.cpp --std=c++11 

 

 

总结一下

mapunordered_map的主要区别在于它们的内部实现、性能和排序行为。

选择使用哪种容器取决于你的具体需求,

如果需要按照键的顺序进行排序,并且性能不是最关键的问题,那么可以选择map

如果需要快速地插入、删除和查找操作,并且不关心元素的顺序,那么可以选择unordered_map