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

免费照片裁剪工具排名优化

免费照片裁剪工具,排名优化,物流网络规划,国外服装网站std::set 是C标准库中的容器之一&#xff0c;它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作&#xff0c;并且具有较好的平均和最坏情况下的时间复杂度。 当向 std::set 插入元素时&#xff0c;它会按照特定的比较函数&#xff08;bool less<…

std::set 是C++标准库中的容器之一,它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作,并且具有较好的平均和最坏情况下的时间复杂度。
当向 std::set 插入元素时,它会按照特定的比较函数(bool less<T>::operator() const(const T &lhs, const T & rhs))将新元素插入到红黑树的适当位置,以保持树的有序性质。插入操作的平均时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn),其中 n n nstd::set 中元素的数量。查找操作(find())使用红黑树的性质,通过比较函数在树中进行二分查找,查找操作的平均时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)

但是当我们把 struct 放入 std::set 会有什么后果呢?因为 std::set 需要在插入到时候排序,所以需要重载 struct 的比较运算符,这个时候就出现问题了,首先我们定义一个结构体 Person

struct Person {Person(int _ID, string _name, int _age) : ID(_ID), age(_age), name(_name) {}int ID;int age;string name;
};

当我们直接插入到 std::set<Person> 中时,会报 complier error 的错误,因此简单补写一个比较运算符重载,如下:

bool operator<(const Person &lhs, const Person &rhs) {return lhs.age < rhs.age;
}

OK,编译起来没有问题,但是我们运行测试一下下面的find操作就会发现问题

#include <iostream>
#include <set>using namespace std;struct Person {Person(int _ID, string _name, int _age) : ID(_ID), age(_age), name(_name) {}int ID;int age;string name;
};bool operator<(const Person &lhs, const Person &rhs) {return lhs.age < rhs.age;
}int main() {set<Person> person;for (int i = 0; i < 1000; ++i) {Person p_tmp(i, "sxj", 10);person.insert(p_tmp);}Person p(2000, "sxj", 10);auto it = person.find(p);if (it != person.end())cout << "Find Person --- ID: " << it->ID << "  name: " << it->name << "  age: " << it->age;elsecout << "Can't find" << endl;return 0;
}

运行结果

明明不在set中的 ID-2000Person也可以被找到。造成这个结果的原因是我们所提供的 operator<() ,当Person p1、p2,在 p1<p2 与 p2<p2 都不成立时,find 就会判断 p1 和 p2 是同一个 Person ,因此会造成这样的错误结果。

解决方案就是补充完整我们的比较运算符重载,完整代码如下

#include <iostream>
#include <set>using namespace std;struct Person {Person(int _ID, string _name, int _age) : ID(_ID), age(_age), name(_name) {}int ID;int age;string name;
};bool operator<(const Person &lhs, const Person &rhs) {if (lhs.ID < rhs.ID) return true;if (lhs.ID > rhs.ID) return false;if (lhs.name < rhs.name) return true;if (lhs.name > rhs.name) return false;return lhs.age < rhs.age;
}int main() {set<Person> person;for (int i = 0; i < 1000; ++i) {Person p_tmp(i, "sxj", 10);person.insert(p_tmp);}Person p(2000, "sxj", 10);auto it = person.find(p);if (it != person.end())cout << "Find Person --- ID: " << it->ID << "  name: " << it->name << "  age: " << it->age;elsecout << "Can't find" << endl;return 0;
}
http://www.15wanjia.com/news/12651.html

相关文章:

  • 建设企业网站的需要多长时间搜索大全引擎入口
  • 如何开网站卖东西搜索引擎入口
  • 多个织梦dedecms网站怎么做站群最佳的资源搜索引擎
  • 深圳品牌网站制作咨询电话百度搜索广告
  • 网上做物理题赚钱的网站网站生成app
  • 山东省建设厅官方网站怎么样上海网站营销推广
  • 网站建设背景 前景分析怎么查询最新网站
  • 厦门孚珀科技 网站开发网站关键词优化报价
  • 顺企网企业黄页seo工具软件
  • 上海都市建筑设计有限公司湖南seo优化首选
  • 北京做网站的工作室qq推广工具
  • 开发工具和开发平台seo排名方案
  • 哪个网站做线上家教比较好站长工具黄
  • 李光辉:营销型企业网站建设的指导思想是什么?宁波搜索引擎优化seo
  • 网站有二维码吗图片外链生成工具在线
  • 百度怎样才能搜到自己的网站seo排名优化厂家
  • linux上搭建网站百度营销平台
  • 新站网站如何做Seoseo黑帽优化
  • 找源码的网站网站seo服务商
  • 厦门电子商务网站建设免费培训seo网站
  • 做网站都有跳转链接宁波做网站的公司
  • 网站管理系统改不了的seo工具不包括
  • 如何做招聘网站效果分析专业seo优化推广
  • 页面做的好看的网站网站推广怎么做有效果
  • 网站接入协议及接入商资质网络热词大全
  • 做乒乓球网站的图片大全金华网站建设
  • worldpress 建站seo搜索引擎优化是
  • 山西笑傲网站建设推广seo免费诊断电话
  • 做网站数据库设计企业网站有什么
  • 太平洋保险网站做的这么烂b站好看的纪录片免费