c++ std
高中只是听说过stl,每次问老师老师都会说“有毒,千万别学”,于是stl有毒的言论深深的印在我脑海,看到就恐惧,于是一直没有学,但是大学后确实很多用到stl的地方必须去学习了。
现在想想老师当年的说法是可以理解的,相传stl速度上有所欠缺(与自己手写的数据结构作比较),毕竟OI的赛制比拼的不是时间,而是效率,同样的策略,使用stl可能就比使用自己写的数据结构少过一个测试点,一个测试点有多重要我是最清楚的2333往事不堪回首。
但是ACM不太一样,时间变得十分的宝贵,简单的题目直接上stl可能三分钟写完,自己手写要半个点,人与人就拉开差距了,难题一般都需要对高级数据结构进行定制,stl大家都用不上,不用太担心效率的问题。
下面进入正题
=======================
vector 是类似数组的存在,不过他是动态数组,在不确定数据量大小的时候十分好用
初始化
vector<int> nums;
vector<int> mynums(nums);
vector<int> rows(m,0);
vector<vector<char>> picture; //二维
int x=mynums.size();
插入&取出
nums.push_back(1);
int x=nums.pop_back();
遍历
for(int i=0;i<num.size();i++)
nums[i];
for(vector<int>::iterator it=nums.begin();it!=nums.end();it++)
cout<<*it;
===============================
unordered_map 是一个hash实现的映射(可以携带辅助数据)
===============================
unordered_set 是一个hash实现的数据存储器,快速判断数据存在性
===============================
set 是红黑树,logn的查找插入删除
默认的是左小右大,所以呢.begin是最小值,.rbegin是最大值
初始化
set<int> s;
插入&删除
s.insert(5);//会返回一个pair,first是迭代器,second是bool表示是否成功
s.erase(2);
s.clear();
遍历(中序遍历)
类似于vector
还可以反向遍历,用reverse_iterator
查找(返回迭代器,如果没找到,返回s.end())
it=s.find(5);
x=*it
摘自别人的博客,还没有测试,不理解为什么自定义比较规则要重载一对小括号。。。
http://blog.csdn.net/wangran51/article/details/88361606.自定义比较函数
(1)元素不是结构体:
例:
//自定义比较函数myComp,重载“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>0;
}
}
set<int,myComp>s;
......
set<int,myComp>::iterator it;
(2)如果元素是结构体,可以直接将比较函数写在结构体内。
例:
struct Info
{
string name;
float score;
//重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const
{
//按score从大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it;
===============================
map 是二叉树,带有映射关系
===============================
c++ std的更多相关文章
- 【NX二次开发】NX内部函数,libuifw.dll文件中的内部函数
本文分为两部分:"带参数的函数"和 "带修饰的函数". 浏览这篇博客前请先阅读: [NX二次开发]NX内部函数,查找内部函数的方法 带参数的函数: void U ...
- C++ std::set
std::set template < class T, // set::key_type/value_type class Compare = less<T>, // set::k ...
- C++ std::priority_queue
std::priority_queue template <class T, class Container = vector<T>, class Compare = less< ...
- C++ std::queue
std::queue template <class T, class Container = deque<T> > class queue; FIFO queue queue ...
- C++ std::multimap
std::multimap template < class Key, // multimap::key_type class T, // multimap::mapped_type class ...
- C++ std::map
std::map template < class Key, // map::key_type class T, // map::mapped_type class Compare = less ...
- C++ std::list
std::list template < class T, class Alloc = allocator > class list; List Lists are sequence co ...
- C++ std::forward_list
std::forward_list template < class T, class Alloc = allocator > class forward_list; Forward li ...
- C++ std::deque
std::deque template < class T, class Alloc = allocator > class deque; Double ended queue deque ...
- C++ std::array
std::array template < class T, size_t N > class array; Code Example #include <iostream> ...
随机推荐
- 项目中遇到的所有ECharts图表集合
全放在了ECharts官网示例里面以后会一直往里面添加: https://gallery.echartsjs.com/explore.html?u=bd-2133619855&type=wor ...
- sublime3 install python3
链接地址:https://blog.csdn.net/Ti__iT/article/details/78830040
- JavaScript全局函数
JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):escape( ).eval_r( ).isFinite( ).isNaN( ).parseFloa ...
- 第6章 服务模式 Service Interface(服务接口)
Service Interface(服务接口) 上下文 您正在设计企业应用程序,并且需要能够通过网络使用其部分功能.此功能需要能够被各类系统使用,因此互操作性是设计的重要方面.除互操作性之外,可能还需 ...
- 用LyX写中文幻灯片
虽然在虚拟机装了texlive以备使用,但是在不动CTeX的情况下,是否能使用LyX写中文幻灯片呢.网上只是寥寥几篇大神们在Linux用LyX的博文. 最近把论文交完写幻灯片,于是也把这个想法尝试了一 ...
- 三.Windows I/O模型之事件选择(WSAEventSelect )模型
1.事件选择模型:和异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和 ...
- Lazy Stored Properties--无括号时为匿名函数
第一次使用的时候进行计算和初始化,后面的引用不在进行计算. A lazy stored property is a property whose initial value is not calcul ...
- [Shell] echo/输出 中引用命令
# 这样是错误的,是引用变量 echo "/Users/${whoami}/Desktop" >>> /Users//Desktop # 正确的写法应该是使用`` ...
- bootstrap中container 类和container-fluid类的区别container类所谓的自适应也是通过margin的改变来完成,container-fluid类的百分百宽度是指在固有的15px的padding前提下宽度总是当前视口的宽度。
container 类和container-fluid类的区别体现在是否有随视口宽度改变的margin存在. container类所谓的自适应也是通过margin的改变来完成,container-fl ...
- 插入排序InsertSort
插入排序:从第二个数开始 一直和前面的数组比较 获得排序定位 代码 /** *插入排序 */ public class InsertSort { public static void inser ...