美文网首页
Effective STL 第31条

Effective STL 第31条

作者: 懒生活 | 来源:发表于2022-10-08 23:21 被阅读0次

准确的选择排序算法

如果要对一个数列进行完全的排序,那么用sort是个不错的选择.
但是如果只是部分排序, 要考虑更高效的算法.

比如你只需要选出最好的前N个,并且需要对这N个排序, 此时用的语句如下std::partial_sort(intVecA.begin(), intVecA.begin() + 5, intVecA.end()); 对partial_sort的第四个入参如果没有指定,默认用的less, 从小到大排列

而且要注意对于partial_sort的区域指定[first, middle) 区域 遵循的是左闭,右开原则,所以如果要把前5个元素放到[0,4]区间上,在partial_sort的入参中要写成std::partial_sort(intVecA.begin(), intVecA.begin() + 5, intVecA.end());

但是如果你只需要选出最好的前N个, 但不需要对这N个排序,这时候最佳的选择是nth_element() 函数. std::nth_element(intVecA.begin(), intVecA.begin() + 4, intVecA.end()); 同样是前5个,注意这里入参和partial_sort的区别.这里的入参是intVecA.begin() + 4, 原因是对于nth_element, 第二个入参的含义是"参数设置为 intVecA.begin() + 4,即指向的是 myvector 容器中第 5 个元素所在的位置。因此,nth_element() 函数会查找“第 5 小”的元素,并将其移动到 第5个位置(也就是位置4,位置从0计数),同时使 5th 之前的所有元素都比第5元素小(默认),使 5th 之后的所有元素都比 第5元素大"

分类算法

在一个序列中,如果要把满足某条件的放在前面,不满足条件的放在后面,同时得到分解点的迭代器. 这种需求使用partition(intVec.begin(), intVec.end(), isValLargerThan10); 该语句会把大于10的序列数据放在intVec容器的前端. 小于等于10的元素放在intVec容器的后端. partition返回的是第一个不满足条件的元素对应的迭代器.

稳定排序,和非稳定排序算法的区别

对于稳定排序,如果排序前A元素和B元素值相同, 且A排在B之前,那么稳定排序后可以保证A始终在B之前,尽管他们的值是相同的.
但非稳定排序做不到. partical_sort, sort, nth_element都是非稳定排序. stable_sort是稳定排序算法.

相关文章

  • EFFECTIVE+STL中文版:50条有效使用STL的经验

    《Effective STL中文版:50条有效使用STL的经验》是EffectiveC++的第3卷,被评为“值得所...

  • 常用的 STL 查找算法

    常用的 STL 查找算法 《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在...

  • Effective STL 第7条

    容器中的对象如果是指针,指针指向的资源,容器没有办法自动释放. 问题引出 容器在自己析构的时候,会把包含的对象逐个...

  • Effective STL 第28条

    正确使用reverse_iterator对于任何一个容器, 使用iterator, 你只可能正向正序访问容器内部的...

  • Effective STL 第22条

    主要不要修改set mutipleSet的key

  • Effective STL 第30条

    如果是区间操作,注意确保容器具有足够的区间 这个很矛盾, 我们害怕使用数组,就是因为数组有可能越界.为了不去考虑数...

  • Effective STL 第31条

    准确的选择排序算法 如果要对一个数列进行完全的排序,那么用sort是个不错的选择.但是如果只是部分排序, 要考虑更...

  • Effective STL 第34条

    为什么有些算法需要排序的区间 binary_search算法是二分查找, 这种查找需要查找空间的序列是有序的. 为...

  • Effective STL 第19条

    理解相等于等价相等的基础是 == , 如果x==y成立,就说明x和y的值相等对于有顺序关系的容器, 为了顺序的存在...

  • Effective STL 第25条

    散列表: 用key可以作为索引快速找到对应的value. 且这些对象在容器里面不排序. 散列表和标准关联容器set...

网友评论

      本文标题:Effective STL 第31条

      本文链接:https://www.haomeiwen.com/subject/amriartx.html