北京网站关键词优化推荐,音乐视频制作软件app,网站源码修改后怎么提交,网站一般用什么语言目录 set使用
set的模板参数
构造函数
成员函数 insert iterator
编辑 find
count
pair
pair 的模板参数
make_pair
multiset使用
multiset 的模板参数
set 与 multiset 的区别 count
map使用
map 的模板参数
构造函数
insert
iterator
find 编辑
cou…目录 set使用
set的模板参数
构造函数
成员函数 insert iterator
编辑 find
count
pair
pair 的模板参数
make_pair
multiset使用
multiset 的模板参数
set 与 multiset 的区别 count
map使用
map 的模板参数
构造函数
insert
iterator
find 编辑
count
operator[]
multimap使用
multimap与map 的区别 set使用 set的模板参数 set 是一个 key 模式的结构底层使用的是红黑树。
set 可以给一个类型由于底层使用的是红黑树所以 key 一定要支持比较所以还有一个 compare的模板参数这里可以给仿函数类型还有一个就是空间配置器空间配置器我们不多说。 构造函数 构造函数我们常用的就是一个空的构造或者是用一段迭代器区间来构造。 vectorint v{ 1,2,3,4,5,6,7,8,9 };setint se(v.begin(), v.end());
这样就构造好了当然任何迭代器都可以。
那么我们遍历一下。 for (auto e : se)cout e ;cout endl;
这里我想应该都能看明白范围for也就是底层使用的是迭代器替换。
实际上我们的迭代器遍历一遍也就类似于中序。 其实这里并不是我们给的有序然后才有序的这里即使是无序经过set后也是有序的。 vectorint v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };setint se(v.begin(), v.end());for (auto e : se)cout e ;cout endl; 我们给这么一段数据我们再看一下。 经过遍历后我们发现不仅有序还顺便去重了。
因为 set 就像我们上次的二叉搜索树一样需要用key来比较大小然后插入所以无法插入两个相同的值。 成员函数 insert 关于 set 的 insert 我们只看这么一个因为只有这个最常用。
参数参数就是 value_type 类型的一个参数value_type 又是什么类型呢 value_type 就是模板中的类型 T。
返回值 返回值是一个 pair 其中 pair 的第一个参数是插入后的迭代器或者是插入失败后的那个位置。
上面我们有一个 pair pair 是什么类型呢我们下面这里先不说。 setint se;se.insert(10);se.insert(3);se.insert(1);se.insert(9);se.insert(6);se.insert(8);se.insert(2);for (auto e : se)cout e ;cout endl; 这个就是我们单元素的插入而这个也是最常用的。 iterator set 的迭代器呢是一个双向迭代器并且还是 const value_type所以set 的迭代器里面的值是不能修改的。 vectorint v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };setint se(v.begin(), v.end());for (auto e : se)cout e ;cout endl; 我们还是使用上面的一段代码但是这里在使用范围for 的时候加了引用我们编译一下。 所以set 的key 其实是不可修改的。 find set 也提供了 find 就是查找传入的一个值如果查到了就返回该位置的迭代器否则就返回 iterator::end()
那么算法里面的查找和set提供的查找有什么不同吗 setint::iterator it1 find(se.begin(), se.end(), 1);if (it1 ! se.end())cout (*it1) endl;auto it2 se.find(1);if (it2 ! se.end())cout (*it2) endl; 这里我们就用到 auto 了可以自动推导返回值类型。
那么上面的这两个有什么区别呢
区别
算法里面的查找是一个一个查找也就是通过迭代器一个一个遍历时间复杂度为 O(N)set提供的find的查找是搜索树的查找时间复杂度为O(N logN) count set 除了提供了 find 还提供了 countcount也是和set一样的查找功能但是返回值有差异set返回查找到的迭代器count返回查找到的个数。
那么对于 set 来说只能插入不同的值要返回值个数有什么用呢
其实这里的 count 是为了下面说的 multiset 设计但是为了匹配一点set 也设计了该函数。
所以这里也就不多介绍。 pair pair 的模板参数 pair 就是一个模板的类其中有两个值一个是 first另一个是second。 make_pair make_pair 是一个模板函数其作用就是返回饭hi一个构造的pair。 multiset使用 multiset 的模板参数 在模板参数这边set 与 multiset 是一样的。
set 和 multiset 的区别就是set 只能插入不同值的元素但是 multiset 可以插入相同值的元素。
所以下面的 multiset 我们就只看一下插入相同元素后遍历后的结果。 set 与 multiset 的区别 vectorint v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };multisetint muset(v.begin(), v. end());for (auto e : muset)cout e ;cout endl; 相比set来说 multiset 即使是插入多个相同元素也是没有问题的。 count multiset 的count 函数就是可以返回查找到元素的个数了set 只能返回 1或者 0但是multiset 还可以返回大于 1 的值因为这里的 multoset 可以存入相同的值。 map使用 map 的模板参数 map 是一个 key value 的模型一个 key 对应一个value所以key 也同样不可以重复。
还有一个TT就表示的是 value 的类型。
map 同样和 set 是一样的还是需要提供一个模板参数关于比较的。
还有一个空间配置器这里也不多介绍。 构造函数 map 的构造函数也是可以用一段区间来初始化。 mapchar, int first{ {a, 1}, {b, 2}, {c, 3}, {d, 4} };mapchar, int second(first.begin(), first.end());for (auto e : second)cout e.first : e.second endl; 先不要管我们下面的打印我们先看一下能否遍历。 insert 这里 map 的插入也是返回一个 pair。
那么这里插入的 value 是什么呢 这里的 value_type 是一个pair所以我们插入的值也是一个pair。
这里的返回值是什么意思呢
其中如果插入成功就返回的pair里面的 first 就是插入成功位置的迭代器second 就是true失败的话 first 就是一个已有的那个 key 的迭代器second 就是false。 mapint, int hash;pairint, int pair1(1, 11);hash.insert(pair1);hash.insert(pairint, int(2,22));hash.insert(make_pair(3, 33)); 这个就是插入这里主要是为了介绍几种插入方式其中一个是构造一个 pair 对象然后插入还有一个是使用pair 的匿名对象最后一个就是我们前面介绍的 make_pair 函数该函数返回一个pair的对象。 iterator 这里的迭代器就是一个 value_type并且也是双向迭代器。 find 这里的 find 返回的也是一个迭代器而这里的迭代器又是一个 value_type类型的所以查找到的值里面的 first 就是key second 就是value。 mapchar, int hash{ {a, 1}, {b, 2}, {c, 3}, {d, 4} };auto it hash.find(a);if (it ! hash.end())cout (*it).first : (*it).second endl; count map 的 count 也是和 set 是一样的主要也是为了 multimap 设计的。 operator[] operato[] 可以说是map 里面很重要的一个内容了而且operator[] 同样很好用。 这里的 [] 里面传入的值是一个 key 类型的数据。 operator[] 的作用
如果没有该元素就插入有的话就返回该 key 对应的 value。
是怎么做到的
其中 operator[] 是使用 insert 来实现的
V operator[](const K key)
{pairiterator, bool ret insert(key, V());return ret.first-second;
} 其实大概就是这样实现的。 multimap使用 multimap与map 的区别 这里的 multimap 与 map 实际上和 set 与 multiset 是差不多的multimap 可以插入相同元素的值而map 是不可以的。 其中 count 函数也就是为 multimap 设计的。
那么他们的区别是什么呢 我觉得最大的几个区别就是上面的一个还有一个就是multimap 是没有 operator[] 的。
因为 multimap 可以插入相同元素的值那么operator[] 里面传入的是key 返回的是 value但是这里的key 不是唯一的所以没有 operator[]. 文章转载自: http://www.morning.lkpzx.cn.gov.cn.lkpzx.cn http://www.morning.rqckh.cn.gov.cn.rqckh.cn http://www.morning.lmhwm.cn.gov.cn.lmhwm.cn http://www.morning.ryxbz.cn.gov.cn.ryxbz.cn http://www.morning.xmyrn.cn.gov.cn.xmyrn.cn http://www.morning.txjrc.cn.gov.cn.txjrc.cn http://www.morning.xtqld.cn.gov.cn.xtqld.cn http://www.morning.bnrff.cn.gov.cn.bnrff.cn http://www.morning.bpttm.cn.gov.cn.bpttm.cn http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.yqpck.cn.gov.cn.yqpck.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.mmqhq.cn.gov.cn.mmqhq.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.cbczs.cn.gov.cn.cbczs.cn http://www.morning.kfbth.cn.gov.cn.kfbth.cn http://www.morning.rqhbt.cn.gov.cn.rqhbt.cn http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn http://www.morning.bpzw.cn.gov.cn.bpzw.cn http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn http://www.morning.rhzzf.cn.gov.cn.rhzzf.cn http://www.morning.mqdr.cn.gov.cn.mqdr.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.rppf.cn.gov.cn.rppf.cn http://www.morning.jlktz.cn.gov.cn.jlktz.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.rzcmn.cn.gov.cn.rzcmn.cn http://www.morning.ygkb.cn.gov.cn.ygkb.cn http://www.morning.qhkdt.cn.gov.cn.qhkdt.cn http://www.morning.tfbpz.cn.gov.cn.tfbpz.cn http://www.morning.znknj.cn.gov.cn.znknj.cn http://www.morning.ryxyz.cn.gov.cn.ryxyz.cn http://www.morning.yhglt.cn.gov.cn.yhglt.cn http://www.morning.gkdqt.cn.gov.cn.gkdqt.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.xpzkr.cn.gov.cn.xpzkr.cn http://www.morning.bgqqr.cn.gov.cn.bgqqr.cn http://www.morning.qnrpj.cn.gov.cn.qnrpj.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn http://www.morning.zpqlf.cn.gov.cn.zpqlf.cn http://www.morning.yfcbf.cn.gov.cn.yfcbf.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.nmngg.cn.gov.cn.nmngg.cn http://www.morning.bnxfj.cn.gov.cn.bnxfj.cn http://www.morning.lsyk.cn.gov.cn.lsyk.cn http://www.morning.mpscg.cn.gov.cn.mpscg.cn http://www.morning.jmbgl.cn.gov.cn.jmbgl.cn http://www.morning.fkflc.cn.gov.cn.fkflc.cn http://www.morning.mnccq.cn.gov.cn.mnccq.cn http://www.morning.qswws.cn.gov.cn.qswws.cn http://www.morning.ctxt.cn.gov.cn.ctxt.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.byjwl.cn.gov.cn.byjwl.cn http://www.morning.wfcqr.cn.gov.cn.wfcqr.cn http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn http://www.morning.qphgp.cn.gov.cn.qphgp.cn http://www.morning.nkwgy.cn.gov.cn.nkwgy.cn http://www.morning.thmlt.cn.gov.cn.thmlt.cn http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn http://www.morning.zcnfm.cn.gov.cn.zcnfm.cn http://www.morning.pinngee.com.gov.cn.pinngee.com http://www.morning.qgwpx.cn.gov.cn.qgwpx.cn http://www.morning.snxbf.cn.gov.cn.snxbf.cn http://www.morning.fssjw.cn.gov.cn.fssjw.cn http://www.morning.qxrct.cn.gov.cn.qxrct.cn http://www.morning.nrydm.cn.gov.cn.nrydm.cn http://www.morning.xrtsx.cn.gov.cn.xrtsx.cn http://www.morning.ynbyk.cn.gov.cn.ynbyk.cn http://www.morning.wzjhl.cn.gov.cn.wzjhl.cn http://www.morning.ysqb.cn.gov.cn.ysqb.cn http://www.morning.htfnz.cn.gov.cn.htfnz.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.tkjh.cn.gov.cn.tkjh.cn http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn http://www.morning.dbhnx.cn.gov.cn.dbhnx.cn http://www.morning.jfzbk.cn.gov.cn.jfzbk.cn