21xrx.com
2024-11-05 21:40:35 Tuesday
登录
文章检索 我的文章 写文章
C++中的Map和Unordered Map介绍
2023-06-23 05:17:03 深夜i     --     --
C++ Map Unordered Map

在C++中,有两种常用的存储结构——Map和Unordered Map,它们都可以用于存储键值对,实现快速的查找和访问。本文将对这两种存储结构进行介绍以及它们的最佳使用场景。

1. Map

Map是一个有序的集合,它存储的是一系列键值对,其中每个键唯一地映射到一个值。在Map中,键值对按照键的大小进行排序,因此可以使用Map进行快速的查找和遍历。Map的实现基于基于平衡二叉树,因此其查找和插入的时间复杂度为O(log n)。

以下是使用Map的示例代码:


#include <iostream>

#include <map>

int main() {

  std::map<std::string, int> m;

  m["apple"] = 2;

  m["banana"] = 4;

  m["orange"] = 6;

  for (auto& p : m)

    std::cout << p.first << " " << p.second << std::endl;

  

}

上述代码创建了一个Map,将三个键值对插入到Map中,并使用迭代器遍历整个Map,输出每对键值对。

2. Unordered Map

Unordered Map是一个无序的集合,它存储的也是一系列键值对,每个键映射到一个值。在Unordered Map中,键值对的存储顺序并不重要,因此可以使用Unordered Map实现快速的查找和遍历,其实现基于哈希表,因此其查找和插入的时间复杂度为O(1)。可以发现,Unordered Map比Map的效率更高,但是由于它是无序的,因此在遍历时不能保证元素的顺序。

以下是使用Unordered Map的示例代码:


#include <iostream>

#include <unordered_map>

int main() {

  std::unordered_map<std::string, int> um;

  um["apple"] = 2;

  um["banana"] = 4;

  um["orange"] = 6;

  for (auto& p : um)

    std::cout << p.first << " " << p.second << std::endl;

  

}

上述代码创建了一个Unordered Map,将三个键值对插入到Unordered Map中,并使用迭代器遍历整个Unordered Map,输出每对键值对。

3. 使用场景

在实际编程中,应根据实际需要选择合适的存储结构。通常,如果需要对键值对进行排序并进行遍历,应使用Map;如果只需要进行快速查找和访问,可以使用Unordered Map。考虑到时间和空间的平衡,大多数情况下,使用Unordered Map即可满足需要。

4. 总结

在本文中,我们了解了C++中的两种常用存储结构——Map和Unordered Map。它们都具有快速的查找和访问能力,但是Map是有序的,而Unordered Map是无序的。选择合适的存储结构可以帮助我们充分利用计算机系统的性能,提高程序的效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复