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
总结一下
map
和unordered_map
的主要区别在于它们的内部实现、性能和排序行为。
选择使用哪种容器取决于你的具体需求,
如果需要按照键的顺序进行排序,并且性能不是最关键的问题,那么可以选择map
;
如果需要快速地插入、删除和查找操作,并且不关心元素的顺序,那么可以选择unordered_map
。