威海高区建设局网站服务态度 专业的网站建设
威海高区建设局网站,服务态度 专业的网站建设,保定网站设计公司排名,江苏专业做网站的公司有哪些目录 一.map映射1.简介2.包含头文件及其初始化3.基本操作4.用迭代器正反遍历5.添加元素的四种方式6.元素的访问7.对比unordered_map#xff0c;multimap 二.set集合1.简介2.包含头文件及其初始化3.基本操作4.元素的访问5.set#xff0c;multiset#xff0c;unordered_setmultimap 二.set集合1.简介2.包含头文件及其初始化3.基本操作4.元素的访问5.setmultisetunordered_setunordered_multiset 比较 三.pair二元组1.简介2.包含头文件及其初始化3.访问与修改 一.map映射
1.简介
在C的STLStandard Template Library中map是一个非常有用的关联容器。它提供了一种键-值对的数据结构其中的元素按照键的顺序进行排序并且每个键是唯一的。本文将详细介绍C STL中map的使用方法和一些常见操作。
2.包含头文件及其初始化
1头文件
#include map2初始化方法 可以使用以下方式声明和初始化一个map对象
mapKeyType, ValueType myMap; // 声明一个空的map
mapstring,string mp;
mapstring,int mp;
mapint,node mp;//node是结构体类型也可以使用已有的键值对初始化map对象
std::mapKeyType, ValueType myMap {{key1, value1},{key2, value2},{key3, value3}
};3.基本操作
代码含义mp.find(key)返回键为key的映射的迭代器 注意用find函数来定位数据出现位置它返回一个迭代器。当数据存在时返回数据所在位置的迭代器数据不存在时返回mp.end()mp.erase(it)删除迭代器对应的键和值mp.erase(key)根据映射的键删除键和值mp.erase(first,last)删除左闭右开区间迭代器对应的键和值mp.size()返回映射的对数mp.clear()清空map中的所有元素mp.insert()插入元素插入时要构造键值对mp.empty()如果map为空返回true否则返回falsemp.begin()返回指向map第一个元素的迭代器mp.end()返回指向map尾部的迭代器最后一个元素的下一个地址mp.rbegin()返回指向map最后一个元素的反向迭代器mp.rend()返回指向map第一个元素前面(上一个的反向迭代器地址mp.count(key)查看元素是否存在存在返回1不存在返回0mp.lower_bound()返回一个迭代器指向键值 key的第一个元素只比较键mp.upper_bound()返回一个迭代器指向键值 key的第一个元素只比较键
接下来将给出相对应代码来帮助理解 1使用insert()函数添加单个键值对
myMap.insert(std::make_pair(key, value));2使用下标运算符[ ]添加或更新键值对
myMap[key] value;3使用erase()函数删除指定键的元素
myMap.erase(key);4使用find()函数查找指定键的元素返回指向该元素的迭代器
auto it myMap.find(key);
if (it ! myMap.end()) {// 找到了该键对应的元素ValueType value it-second;
}5使用lower_bound()函数查找大于等于指定键的第一个元素的迭代器
auto it myMap.lower_bound(key);
if (it ! myMap.end()) {// 找到了大于等于指定键的第一个元素KeyType foundKey it-first;ValueType foundValue it-second;
}6使用upper_bound()函数查找大于指定键的第一个元素的迭代器
auto it myMap.upper_bound(key);
if (it ! myMap.end()) {// 找到了大于指定键的第一个元素KeyType foundKey it-first;ValueType foundValue it-second;
}4.用迭代器正反遍历
正向遍历
mapint,int mp;
mp[1] 2;
mp[2] 3;
mp[3] 4;
auto it mp.begin();
while(it ! mp.end())
{cout it-first it-second \n;it ;
}反向遍历
mapint,int mp;
mp[1] 2;
mp[2] 3;
mp[3] 4;
auto it mp.rbegin();
while(it ! mp.rend())
{cout it-first it-second \n;it ;
}5.添加元素的四种方式
//先声明
mapstring,string mp;
mp[学习] 看书;//第一种
mp[玩耍] 打游戏;
mp.insert(make_pair(vegetable,蔬菜));//第二种
mp.insert(pairstring,string(fruit,水果));//第三种
mp.insert({hahaha,wawawa});//第四种6.元素的访问
1迭代器访问
int main() {std::mapint, std::string myMap {{1, Alice},{2, Bob},{3, Charlie}};// 使用迭代器进行遍历和访问for (auto it myMap.begin(); it ! myMap.end(); it) {int key it-first; // 访问键string value it-second; // 访问值cout key : value std::endl;}return 0;
}2智能指针访问
for(auto i : mp)
cout i.first i.second endl;//键值3单个访问
mapchar,int::iterator it mp.find(a);
cout it - first it-second \n;4c17特性才具有
for(auto [x, y] : mp)cout x y \n;
//x,y对应键和值7.对比unordered_mapmultimap
1.mapmap是一个有序的关联容器其中的元素按照键的顺序进行排序。每个键是唯一的不允许重复。map使用红黑树实现插入和查找操作的时间复杂度为O(log n)。
2.unordered_mapunordered_map是一个无序的关联容器其中的元素没有特定的顺序。每个键是唯一的不允许重复。unordered_map使用哈希表实现插入和查找操作的平均时间复杂度为O(1)最坏情况下为O(n)。也是用哈希表实现
3.multimapmultimap是一个有序的关联容器其中的元素按照键的顺序进行排序。允许键重复即可以有相同的键。multimap使用红黑树实现插入和查找操作的时间复杂度为O(log n)。
4.unordered_multimapunordered_multimap是一个无序的关联容器其中的元素没有特定的顺序。允许键重复即可以有相同的键。unordered_multimap使用哈希表实现插入和查找操作的平均时间复杂度为O(1)最坏情况下为O(n)。 对比优劣
1map和unordered_map都提供了快速的查找操作但是在插入和删除操作上unordered_map通常比map更快。
2unordered_map的元素没有特定的顺序适用于不需要保持顺序的场景。而map的元素是有序的适用于需要按照键的顺序进行访问的场景。
3multimap和unordered_multimap允许键重复适用于需要存储相同键的场景。multimap保持元素的有序性而unordered_multimap没有特定的顺序。
4在空间占用上哈希表实现的容器(unordered_map和unordered_multimap)通常需要更多的内存而红黑树实现的容器(map和multimap)通常需要较少的内存。
选择使用哪种容器取决于具体的需求。如果需要有序访问或者需要保持元素的有序性可以选择map或multimap。如果对元素的顺序没有特定要求但需要快速的插入和查找操作可以选择unordered_map或unordered_multimap。
二.set集合
1.简介
在C的STLStandard Template Library中set是一个非常有用的关联容器。它提供了一种有序集合的数据结构其中的元素按照键的顺序进行排序并且每个键是唯一的。本文将详细介绍C STL中set的使用方法和一些常见操作。
2.包含头文件及其初始化
1头文件
#include set2初始化
std::setKeyType mySet; // 声明一个空的set
std::setKeyType mySet {element1, element2, element3};//也可以使用已有的元素初始化set对象3.基本操作
代码含义s.begin()返回set容器的第一个元素的地址迭代器s.end()返回set容器的最后一个元素的下一个地址迭代器s.rbegin()返回逆序迭代器指向容器元素最后一个位置s.rend()返回逆序迭代器指向容器第一个元素前面的位置s.clear()删除set容器中的所有的元素,返回unsigned int类型s.empty()判断set容器是否为空s.insert()插入一个元素s.size()返回当前set容器中的元素个数erase(iterator)删除定位器iterator指向的值erase(first,second删除定位器first和second之间的值左闭右开erase(key_value)删除键值key_value的值s.find(元素)查找set中的某一元素有则返回该元素对应的迭代器无则返回ends.lower_bound(k)返回大于等于k的第一个元素的迭代器s.upper_bound(k)返回大于k的第一个元素的迭代器访问
接下来将给出相对应代码来帮助理解
1.插入元素
mySet.insert(element);
mySet.insert(beginIterator, endIterator);2.删除元素
mySet.erase(value);
mySet.erase(beginIterator, endIterator);//注意左闭右开3.查找元素
auto it mySet.find(value);
if (it ! mySet.end()) {// 找到了该值对应的元素
}auto it mySet.lower_bound(value);
if (it ! mySet.end()) {// 找到了大于等于指定值的第一个元素
}auto it mySet.upper_bound(value);
if (it ! mySet.end()) {// 找到了大于指定值的第一个元素
}4.元素的访问
1迭代器访问
for(setint::iterator its.begin();it!s.end();it)cout*it ;2智能指针
for(auto i : s)coutiendl;3访问最后一个元素
//第一种
cout*s.rbegin()endl;//第二种
setint::iterator iter s.end();
iter--;
cout(*iter)endl; //打印2;//第三种
cout*(--s.end())endl;5.setmultisetunordered_setunordered_multiset 比较
1.set有序的关联容器每个元素都是唯一的。使用红黑树实现插入和查找的时间复杂度为O(log n)。元素按照键的顺序进行排序。
2.multiset有序的关联容器允许元素重复。使用红黑树实现插入和查找的时间复杂度为O(log n)。元素按照键的顺序进行排序。
3.unordered_set无序的关联容器每个元素都是唯一的。使用哈希表实现插入和查找的平均时间复杂度为O(1)最坏情况下为O(n)。元素没有特定的顺序。
4.unordered_multiset无序的关联容器允许元素重复。使用哈希表实现插入和查找的平均时间复杂度为O(1)最坏情况下为O(n)。元素没有特定的顺序。
总结 set和multiset是有序的元素按照键的顺序进行排序multiset允许元素重复。 unordered_set和unordered_multiset是无序的元素没有特定的顺序unordered_multiset允许元素重复。 set和unordered_set的查找和插入操作的时间复杂度较低适用于需要快速查找和插入的场景。 multiset和unordered_multiset允许元素重复适用于需要存储相同键的场景。 unordered_set和unordered_multiset在插入和查找操作上通常比set和multiset更快但它们没有保持元素的有序性。
三.pair二元组
1.简介
在C的STLStandard Template Library中pair是一个非常有用的模板类。它提供了一种简单的方式来存储一对值即键值对。pair可以用于各种场景例如在容器中存储关联的数据返回多个值等。本文将详细介绍C STL中pair的使用方法和一些常见操作。
2.包含头文件及其初始化
1头文件
#include utility2初始化
pairType1, Type2 myPair; // 声明一个空的pair
pairType1, Type2 myPair(value1, value2); // 使用给定的值初始化pair
myPair std::make_pair(value1, value2); // 使用make_pair函数创建pair并赋值3.访问与修改
//定义结构体数组
pairint,intp[20];
for(int i 0; i 20; i)
{//和结构体类似first代表第一个元素second代表第二个元素cout p[i].first p[i].second;
}pair可以作为容器例如vector、list、map等的元素使用。这样可以方便地存储和访问关联的数据。 下面是一个使用pair作为容器元素的示例代码
int main() {vectorpairint, string myVector;// 添加pair元素myVector.push_back(make_pair(1, Alice));myVector.push_back(make_pair(2, Bob));myVector.push_back(make_pair(3, Charlie));// 遍历输出pair元素for (const auto pair : myVector) {cout Key: pair.first , Value: pair.second std::endl;}return 0;
}在上述示例代码中我们创建了一个vector容器myVector其中的元素是pair类型包含一个整数和一个字符串。 然后我们使用push_back()函数向容器中添加了一些pair元素。 最后我们使用范围遍历来输出容器中的pair元素。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89249.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!