通俗一点讲map其实就是python的字典(学会python字典 == c++_map)!!!
map和unordered_map都是C++中的关联容器,用于存储键值对。其主要区别在于底层实现方式和性能表现。
1、底层实现方式
map内部使用红黑树(一种自平衡二叉查找树)来实现,而unordered_map则使用哈希表来实现。这意味着,在map中,元素是按照键的大小进行有序排列的,而在unordered_map中,则不保证元素的顺序。
2、性能表现
当需要有序地遍历元素时,map的性能比unordered_map更好。但是,当需要快速查找特定的元素时,unordered_map通常比map更快。原因在于,map在插入和删除操作时需要维护红黑树的平衡,而unordered_map则只需要计算哈希值并将元素放入相应的桶中即可。
3、用途
由于map可以保证元素的有序性,所以适合用于需要有序的情况下,例如按照键排序输出元素、寻找最小值/最大值等。而unordered_map则适合用于需要快速查找元素的情况下,例如查找是否存在某个键值对、统计某个值出现的次数等。
总之,选择map还是unordered_map取决于具体的需求。如果需要有序地处理元素,则应该使用Map;如果需要快速查找元素,则可以使用unordered_map。
1.写入数据 && 读取数据
#include <iostream>
#include <algorithm>
#include <map>
#include <unordered_map>
using namespace std;map<string,int> vm;int main()
{// 插入数据// key = age value = 18//方法1vm["age"] = 18; //方法2vm.insert(pair<string,int>("id",123456));//读取数据//方法1map<string,int>::iterator it;for(it = vm.begin();it!=vm.end();it++){cout<<it->first<<" "<<it->second<<endl;}//方法2for(auto it = vm.begin();it!=vm.end();it++){cout<<it->first<<" "<<it->second<<endl;}//方法3for(auto it:vm){cout<<it.first<<" "<<it.second<<endl;}return 0;
}
2.删除数据
#include <iostream>
#include <map>
#include <algorithm>using namespace std;map<string,int> vm = {{"xxw",18},{"xm",19},{"bj",14}};int main()
{// 删除指定元素map<string,int>::iterator t1;t1 = vm.find("xm"); // "xm"为keyvm.erase(t1);for(auto it:vm)cout<<it.first<<" "<<it.second<<endl;return 0;
}
3.查找 && 删除
#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;unordered_map<string, int> vmu = {{"xxw", 18}, {"asd", 19}, {"rty", 45}};int main()
{// 查找unordered_map<string, int>::iterator it;string name;printf("请输入要查早的key:");cin >> name;it = vmu.find(name);if (it != vmu.end()) {cout << "找到了\n";} else {cout << "抱歉 没找到!" << endl;}printf("-----------------------------------\n");//删除_直接通过key来删除vmu.erase("xxw");printf("删除之后:\n");for(auto it:vmu)cout<<it.first<<" "<<it.second<<endl;return 0;
}