C++中的映射与无序映射

先决条件: 地图 , 标准::无序地图 说到效率,地图和无序地图之间存在巨大差异。 我们必须了解两者的内在作用,才能决定使用哪一种。

null

区别:

                  | map             | unordered_map---------------------------------------------------------Ordering        | increasing  order   | no ordering                | (by default)        |Implementation  | Self balancing BST  | Hash Table                | like Red-Black Tree |  search time     | log(n)              | O(1) -> Average                 |                     | O(n) -> Worst CaseInsertion time  | log(n) + Rebalance  | Same as search                      Deletion time   | log(n) + Rebalance  | Same as search

在需要时使用std::map

  • 你需要有序的数据。
  • 您必须打印/访问数据(按排序顺序)。
  • 你需要元素的前置/后继。
  • 看见 BST相对于哈希表的优势 更多的病例。

CPP

// CPP program to demonstrate use of std::map
#include <bits/stdc++.h>
int main()
{
// Ordered map
std::map< int , int > order;
// Mapping values to keys
order[5] = 10;
order[3] = 5;
order[20] = 100;
order[1] = 1;
// Iterating the map and
// printing ordered values
for ( auto i = order.begin(); i
!= order.end(); i++) {
std::cout << i->first
<< " : "
<< i->second << '' ;
}
}


输出

1 : 13 : 55 : 1020 : 100

使用std::无序_映射

  • 您需要对一些数据(例如字符串)进行计数,不需要排序。
  • 您需要单元素访问,即不需要遍历。

CPP

// CPP program to demonstrate use of
// std::unordered_map
#include <bits/stdc++.h>
int main()
{
// Unordered map
std::unordered_map< int , int > order;
// Mapping values to keys
order[5] = 10;
order[3] = 5;
order[20] = 100;
order[1] = 1;
// Iterating the map and
// printing unordered values
for ( auto i = order.begin();
i != order.end(); i++)
{
std::cout << i->first
<< " : "
<< i->second << '' ;
}
}


输出

1 : 120 : 1005 : 103 : 5

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享