c++: unordered_map

    std::map对应的数据结构是红黑树。红黑树是一种近似于平衡的二叉查找树,里面的数据是有序的。在红黑树上做查找、插入、删除操作的时间复杂度为O(logN)。

    std::unordered_map对应哈希表,哈希表的特点就是查找效率高,时间复杂度为常数级别O(1), 而额外空间复杂度则要高出许多。所以对于需要高效率查询的情况,使用std::unordered_map容器,但是std::unordered_map对于迭代器遍历效率并不高。而如果对内存大小比较敏感或者数据存储要求有序的话,则可以用std::map容器。

 

std::unordered_map<std::string, std::string> mymap2 = { { "Australia", "Canberra" }, { "U.S.", "Washington" }, { "France", "Paris" } };  
    std::cout << "mymap2 contains:";  
    for (auto it = mymap2.begin(); it != mymap2.end(); ++it)  
        std::cout << " " << it->first << ":" << it->second;  
    std::cout << std::endl;  
   umap.insert(std::make_pair("e", 2.718)); // 可以通过make_pair插入,也可以通过hashmap.insert({ nums[i], i })插入{};
   // erase examples:  
    mymap5.erase(mymap5.begin());      // erasing by iterator  
    mymap5.erase("France");             // erasing by key  
    mymap5.erase(mymap5.find("China"), mymap5.end()); // erasing by range  

 for (auto it = mymap2.begin(); it != mymap2.end(); ++it)  
        std::cout << " " << it->first << ":" << it->second;  //如map


unordered_mapC++ STL中的关联容器之一,用于存储键值对,其中键和值都可以是任何数据类型。与map不同的是,unordered_map中的元素是无序的,因此查找和插入的时间复杂度平均为O(1),最坏情况下为O(n)。unordered_map的实现是基于哈希表的,因此它的查找和插入速度比map更快,但是它的内存占用也更大一些。因为哈希表需要额外的空间来存储哈希表本身以及每个桶中的链表或向量。unordered_map支持以下操作: 1. insert(key, value):插入一个键值对。 2. erase(key):删除指定键的元素。 3. find(key):查找指定键的元素。 4. size():返回元素个数。 5. empty():判断容器是否为空。 6. clear():清空容器中的所有元素。 下面是一个unordered_map的示例: ```c++ #include <iostream> #include <unordered_map> using namespace std; int main() { unordered_map<string, int> my_map; my_map.insert(make_pair("apple", 3)); my_map.insert(make_pair("banana", 2)); my_map.insert(make_pair("orange", 5)); my_map["pear"] = 4; cout << "my_map contains:"; for (auto it = my_map.begin(); it != my_map.end(); ++it) cout << " " << it->first << ":" << it->second; cout << endl; my_map.erase("banana"); cout << "my_map contains:"; for (auto it = my_map.begin(); it != my_map.end(); ++it) cout << " " << it->first << ":" << it->second; cout << endl; auto search = my_map.find("pear"); if (search != my_map.end()) cout << "Found " << search->first << " with value " << search->second << endl; else cout << "Key not found" << endl; cout << "my_map size is " << my_map.size() << endl; if (my_map.empty()) cout << "my_map is empty" << endl; else cout << "my_map is not empty" << endl; my_map.clear(); if (my_map.empty()) cout << "my_map is empty" << endl; else cout << "my_map is not empty" << endl; return 0; } ``` 输出结果为: ``` my_map contains: orange:5 apple:3 pear:4 banana:2 my_map contains: orange:5 apple:3 pear:4 Found pear with value 4 my_map size is 3 my_map is not empty my_map is empty ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值