在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、map1.map简介 map是一种关联式容器,一对一的映射
因为map的底层实现是红黑树,所以map会对插入的数据进行排序。 2.插入元素 采用insert和直接下标访问两种方式,同时可以看到输出是按照key值排序。 #include"map" int main() { map<int,string> um; um.insert(pair<int,string>(2,"steve")); um[1]="antonio"; //访问方式,可以看到插入的元素最后会按照key值排序 for (auto item:um) { cout<<item.first<<" "<<item.second<<endl; } //1 antonio //2 steve return 0; } 3.查找元素 查找key出现的位置,如果没有在map中,则返回end(指向尾部的迭代器) #include"map" int main() { map<int,string> um; um.insert(pair<int,string>(2,"steve")); um[1]="antonio"; if(um.find(2)!=um.end()) cout<<"have found"<<endl; else cout<<"not found"<<endl; return 0; } 4.map常用成员方法 begin() 返回指向map头部的迭代器 end() 返回指向map末尾的迭代器 rbegin() 返回一个指向map尾部的逆向迭代器 rend() 返回一个指向map头部的逆向迭代器 clear() 删除所有元素 count() 返回指定元素出现的次数 empty() 如果map为空则返回true erase() 删除一个元素 find() 查找一个元素 insert() 插入元素 lower_bound() 返回键值>=给定元素的第一个位置 size() 返回map中元素的个数 5.map和unordered_map比较 在数据量小的时候,unordered_map比map慢 原因在于unordered_map的初始化比较耗时,我们都知道map是红黑树,unordered_map是哈希表,造成性能差异的原因在于,红黑树初始化时,节点只需要一个,后续的插入只是插入新的节点,但是哈希表初始化时就不是那么简单了,哈希表初始化时需要申请一个数组,数组的每个元素都指向一条链表,所以初始化时需要申请很多内存,相比于map,的确更耗时。
二、set1.set简介 set只保存一个元素,就是key。 set底层实现同样是红黑树,故而内部数据是会排序好。 2.set的插入和遍历 采用insert方法插入。 #include"set" int main() { set<int> us; us.insert(3); us.insert(1); us.insert(2); //1 2 3 for (auto item:us) { cout<<item<<" "; } return 0; } 3.set常用成员方法 begin() 返回set容器的第一个元素 end() 返回set容器的最后一个元素 rbegin() 返回的值和end()相同 rend() 返回的值和rbegin()相同 clear() 删除set容器中的所有的元素 empty() 判断set容器是否为空 size() 返回当前set容器中的元素个数 三、 unordered_map1.简介 unordered_map是一种关联式容器,一对一的映射
底层实现是hash表,故而其内的元素是无序的。 其中hash是使用的拉链法解决冲突。如下图所示
2.元素初始化 插入有常用的两种方式,赋值常用量两种方式。 #include"unordered_map" #include "iostream" using namespace std; //对unordered_map<int,string>使用别名int_string typedef unordered_map<int,string> int_string; int main() { //初始化的几种方法 int_string one={{3,"bash"},{1,"java"}}; one[4]="python";//直接下标插入元素 one.insert(pair<int,string>(2,"c++"));//使用成员方法insert插入元素 int_string two ( one ); // 用数组初始 int_string three ( two.begin(),two.end()); // 范围初始化 //访问方式 for (auto item:three) { cout<<item.first<<" "<<item.second<<endl; } return 0; }
3.常用成员方法 begin() 指向第一个元素 四、 unordered_set1.简介 只保存关键词key 底层实现是hash表,故而其内的元素是无序的。 2.数据初始化 #include"iostream" #include"unordered_set" using namespace std; typedef unordered_set<int> US; int main() { US us; us.insert(2); us.insert(1); US one(us);//one=us;是等价的 US two(one.begin(),one.end()); //访问方式 for (auto item:two) { cout<<item<<endl; } return 0; }
五、vector1.简介 vector是序列式容器,按照下表访问。 2.数据初始化 含有一维数组和二维数组的初始化 #include"vector" using namespace std; typedef vector<int> Vector; int main() { Vector vec(10,5); Vector vec1(vec); //Vector vec1=vec这两种方式是等价的 Vector vec2(vec.begin(),vec.end()); Vector vec3={1,2,3,4}; Vector vec4(10);//初始化数组的大小是10,value是0 Vector vec5(10,1);//初始化数组的大小是10,value是1 //二维矩阵的初始化 vector<vector<int>> ans(12,vector<int>(10,0)); vector<vector<int>> ans1(ans); return 0; } 3.常用成员方法 begin() 指向第一个元素的迭代器 #include"iostream" #include"vector" using namespace std; typedef vector<int> Vector; int main() { Vector vec; vec.push_back(1);//push元素到末尾 vec.push_back(2); vec.push_back(3); vec.insert(vec.begin()+1,-1); //1 -1 2 3 for (int i = 0; i < vec.size(); ++i) { cout<<vec[i]<<" "; } vec.pop_back();//将元素弹出 //1 -1 2 for (int i = 0; i < vec.size(); ++i) { cout<<vec[i]<<" "; } return 0; }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论