当前位置: 首页 > news >正文

湖南优化网站建设wordpress首页太慢

湖南优化网站建设,wordpress首页太慢,南京软件开发公司有哪些,网站开发 定制 合同map和set 文章目录 map和set关联式容器setset介绍set的函数测试代码 multiset注意事项测试代码 mapmap介绍map的函数测试代码 关联式容器 前面了解过的vector,list,string等容器都是序列式容器,存储的都是元素本身,底层都是线性的…

map和set

文章目录

  • map和set
    • 关联式容器
    • set
      • set介绍
      • set的函数测试代码
    • multiset
      • 注意事项
      • 测试代码
    • map
      • map介绍
      • map的函数测试代码

关联式容器

前面了解过的vector,list,string等容器都是序列式容器,存储的都是元素本身,底层都是线性的数据结构。

map和set存储的都是<key,value> 的键值对,在进行数据检索时效率更高

STL中对键值对的定义:

template <class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair(): first(T1()), second(T2())
{}
pair(const T1& a, const T2& b): first(a), second(b)
{}
};

set

文档:https://legacy.cplusplus.com/reference/set/set/?kw=set

set介绍

  • 查找:set的底层是红黑树,存储键值对,中序遍历结果是有序的,默认从小到大排序,查找的时间复杂度是 l o g 2 n log_2n log2n
  • 去重:除了排序,set还有去重的功能。
  • 底层1:set存储的实际上是**<value,value>结构**,map才是真正的<key,value>
  • 底层2:**set的key值不能修改,因为迭代器底层都是const迭代器。**但是可以插入和删除。

在这里插入图片描述
在这里插入图片描述

set的函数测试代码

void test_set1()
{// 排序+去重set<int> s;s.insert(3);s.insert(3); s.insert(3);s.insert(5);s.insert(8);s.insert(7);for (auto e : s){cout << e << " ";}cout << endl;//3 5 7 8if (s.find(5) != s.end()){cout << "找到了" << endl;}if (s.count(5)){cout << "找到了" << endl;}std::set<int> myset;std::set<int>::iterator itlow, itup;for (int i = 1; i < 10; i++)myset.insert(i * 10); // 10 20 30 40 50 60 70 80 90myset.insert(35);// 删除[30 60]//itlow = myset.lower_bound(30);   // >=     //itup = myset.upper_bound(60);    // >//std::pair<std::set<int>::const_iterator, std::set<int>::const_iterator> ret;auto ret = myset.equal_range(30);//ret的类型是pairitlow = ret.first;itup = ret.second;// [itlow, itup)cout << *itlow << endl;cout << *itup << endl;myset.erase(itlow, itup);                    for (auto e : myset){cout << e << " ";}cout << endl;	// 10 20 70 80 90
}

multiset

注意事项

  • 允许有重复的元素
  • find()函数查找的值有多个,返回的是多个值的第一个位置(树的结构决定,方便后续插入删除)
    在这里插入图片描述

测试代码

void test_set2()
{// 排序multiset<int> s;s.insert(3);s.insert(5);s.insert(8);s.insert(7);s.insert(7);s.insert(9);s.insert(7);for (auto e : s){cout << e << " ";//3 5 7 7 7 8 9}cout << endl;// 返回中序第一个7auto pos = s.find(7);while (pos != s.end()){cout << *pos << " ";	//7 7 7 8 9++pos;}cout << endl;cout << s.count(7) << endl;	//3
}

map

map介绍

  • 和set的相同点:

    1. map中的key是唯一的,并且不能修改

    在这里插入图片描述

    1. 默认按照小于的方式对key进行比较

    2. map中的元素如果用迭代器去遍历,可以得到一个有序的序列

    3. map的底层为平衡搜索树(红黑树),查找效率比较高 O ( l o g 2 N ) O(log_2 N) O(log2N)

  • 不同点

    1. map中的的元素是键值对(真正的)
    2. 可以通过key修改value的值(底层迭代器并不都是const迭代器)

    在这里插入图片描述

map的函数测试代码

C++11支持多参数的构造函数隐式类型的转换,但是C++98没有

// 隐式类型的转换
class A
{
public:A(int a1, int a2):_a1(a1), _a2(a2){}
private:int _a1;int _a2;
};string str1 = "hello";A aa1 = { 1, 2 };
pair<string, string> kv2 = { "string", "字符串" };
  • insert()

多种形式

void test_map1()
{map<string, string> dict;pair<string, string> kv1("insert", "插入");dict.insert(kv1);dict.insert(pair<string, string>("sort", "排序"));// C++98dict.insert(make_pair("string", "字符串"));// C++11 多参数的构造函数隐式类型转换dict.insert({ "string", "字符串" });// 隐式类型的转换string str1 = "hello";A aa1 = { 1, 2 };pair<string, string> kv2 = { "string", "字符串" };
}

] 插入时若map中已经有key,不对value进行覆盖

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CLenovo%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20230829015
在这里插入图片描述

void test_map2()
{map<string, string> dict;dict.insert(make_pair("string", "字符串"));dict.insert(make_pair("sort", "排序"));dict.insert(make_pair("insert", "插入"));// 不插入,不覆盖;插入过程中,只比较key,value是相同无所谓// key已经有了就不插入了dict.insert(make_pair("insert", "xxxx"));auto it = dict.begin();while (it != dict.end()){//cout << (*it).first << ":" << (*it).second << endl;cout << it->first << ":" << it->second << endl;++it;}cout << endl;for (const auto& kv : dict){cout << kv.first << ":" << kv.second << endl;}
}

operator[],若map中没有该元素,则会先进行插入

void test_map4()
{map<string, string> dict;dict.insert(make_pair("string", "字符串"));dict.insert(make_pair("sort", "排序"));dict.insert(make_pair("insert", "插入"));cout << dict["sort"] << endl; // 查找和读dict["map"];                  // 插入dict["map"] = "映射,地图";     // 修改dict["insert"] = "xxx";       // 修改dict["set"] = "集合";         // 插入+修改
}
http://www.yayakq.cn/news/388611/

相关文章:

  • 外贸网站建设560工商企业管理就业方向
  • 网站群方案电子商务网站开发平台图
  • 移动网站建设哪家快企业网站建设门户
  • 网站聚合页网站怎么做效果更好
  • 未来分发网下载app信息流优化师没经验可以做吗
  • 什么叫网站策划书济南制作网站的公司吗
  • 如何建设旅游网站dtcms网站开发教程
  • 百分百营销软件西安seo服务商
  • 湖北交投建设集团有限公司网站如何做网站销售
  • 建设一个网站预算医药公司网站设计
  • app网站与普通网站的区别莒县做网站的电话
  • 如何备份一个网站廊坊网站建设廊坊网络公司驻梦
  • 做企业网站的腾讯qq
  • 厦门市建设保障性住房局网站公司官网登录入口
  • 免费私人网站建设软件青柠影院免费观看电视剧高清8
  • 网站用什么格式的图片格式免费建网站 步骤
  • 微信订阅号不认证可以做网站吗推广营销平台
  • 做网站需要Excel表格吗顺德网站制作公司哪家好
  • 三亚网站开发哪家好wordpress 菜单小工具
  • 阿里云网站建设 部署与发布考试wordpress如何增加轮播
  • 旅游网站建设的结论third 原创wordpress企业主题
  • 做搜狗手机网站长尾表格比较多得网站这么做响应式
  • 汽修网站建设免费假怀孕单子在线制作图片
  • 17zwd一起做网站项目建设方案
  • 南通网站建设排名公司哪家好网站seo外包
  • 30天网站建设实录素材微网站访问量
  • 企业网站建设方案书网络营销课程收获
  • 北京社招网站自己的网站没有域名
  • 大连百姓网免费发布信息网站本土建站工作室
  • 服装网站建设规定wordpress 页面平铺