STL之使用vector排序
应用场景:
在内存中维持一个有序的vector:
// VectorSort.cpp : Defines the entry point for the console application. #include <iostream>
#include <vector>
#include <algorithm> //先自定义一个结构体
struct Test {
float member1;
std::string member2; };
bool SortByM1( const Test* v1, const Test* v2)//注意:本函数的参数的类型一定要与vector中元素的类型一致
{
return v1->member1 > v2->member1; //降序排列
//return v1->member1 > v2->member1; //升序排列
}
void PrintVector( std::vector<Test*> & vec)
{
/*
插一句,
vec.begin()对应的位置是向量的第一个位置,
vec.end()对应的是vector中的最后的一个元素位置的后面的一个位置(我认为,实际上是一个无效位置)
文档上的定义:Returns an iterator referring to the past-the-end element in the vector container.
*/
for(std::vector<Test*>::iterator it = vec.begin() ; it != vec.end() ; it++ )
{
std::cout<<(*it)->member1<<'\t'<<(*it)->member2<<std::endl;
}
} int main(int argc, char* argv[])
{
std::vector<Test*> vecTest;
std::string stt;
for(int i=; i<;++i){
stt = "sh" + stt;
Test* tmp = new Test();
tmp->member1 = i;
tmp->member2 = stt;
vecTest.push_back(tmp);
} //排序之前
std::cout<<"Before Sort:"<<std::endl;
PrintVector(vecTest); std::cout<<"对向量中的所有元素按member1进行升序排列:"<<std::endl;
std::sort(vecTest.begin(),vecTest.end(), SortByM1);
PrintVector(vecTest); //std::cout<<"对向量中的第2个到第5个元素按member1进行升序排列:"<<std::endl;
//std::sort(vecTest.begin()+1,vecTest.begin()+5,SortByM1);//vecTest.begin()+5为第6个位置
//PrintVector(vecTest); for(std::vector<Test*>::iterator it = vecTest.begin();
it != vecTest.end(); ++it){
delete *it; #free掉内存
} return ;
} root@u18:~/cp/test# g++ vector_sort.cpp -g -Wall
root@u18:~/cp/test# ./a.out
Before Sort:
sh
shsh
shshsh
shshshsh
shshshshsh
shshshshshsh
shshshshshshsh
shshshshshshshsh
shshshshshshshshsh
shshshshshshshshshsh
对向量中的所有元素按member1进行升序排列:
shshshshshshshshshsh
shshshshshshshshsh
shshshshshshshsh
shshshshshshsh
shshshshshsh
shshshshsh
shshshsh
shshsh
shsh
sh
root@u18:~/cp/test# valgrind --tool=memcheck --leak-check=yes ./a.out
==24247== Memcheck, a memory error detector
==24247== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==24247== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==24247== Command: ./a.out
==24247==
Before Sort:
0 sh
1 shsh
2 shshsh
3 shshshsh
4 shshshshsh
5 shshshshshsh
6 shshshshshshsh
7 shshshshshshshsh
8 shshshshshshshshsh
9 shshshshshshshshshsh
对向量中的所有元素按member1进行升序排列:
9 shshshshshshshshshsh
8 shshshshshshshshsh
7 shshshshshshshsh
6 shshshshshshsh
5 shshshshshsh
4 shshshshsh
3 shshshsh
2 shshsh
1 shsh
0 sh
==24247==
==24247== HEAP SUMMARY:
==24247== in use at exit: 0 bytes in 0 blocks
==24247== total heap usage: 25 allocs, 25 frees, 768 bytes allocated
==24247==
==24247== All heap blocks were freed -- no leaks are possible
==24247==
==24247== For counts of detected and suppressed errors, rerun with: -v
==24247== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
STL之使用vector排序的更多相关文章
- c++中STL容器中的排序
1.c++STL中只有list自带了排序函数: (1).若list中存放的是int类型或者string类型,直接利用sort即可: list <int> list1; ...
- C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法
每次忘记都去查,真难啊 /* C/C++解题常用STL大礼包 含vector,map,set,queue(含优先队列) ,stack的常用用法 */ /* vector常用用法 */ //头文件 #i ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- 1016. Phone Bills (25) -vector排序(sort函数)
题目如下: A long-distance telephone company charges its customers by the following rules: Making a long- ...
- C++ vector 排序
C++ vector 排序 C++中当 vector 中的数据类型为基本类型时我们调用std::sort函数很容易实现 vector中数据成员的升序和降序排序,然而当vector中的数据类型为自定义结 ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
随机推荐
- MySQL varchar和char类型
varchar和char是两种最主要的字符串类型.不幸的是,很难精确地解释这些值是怎么储存在磁盘和内存中的,因为这根存储引擎的具体实现有关.下面的描述假设使用的存储引擎是InnoDB或者MyISAM. ...
- js命名空间的使用
js命名空间的使用: test.html 代码如下: <!DOCTYPE HTML><html lang="en-US"><head> & ...
- Storm博客收集
http://wbj0110.iteye.com/category/292875 http://blog.csdn.net/hguisu/article/details/8454368?reload ...
- DGIM
http://blog.liulixiang.info/2011/04/05/dgim%E7%AE%97%E6%B3%95%EF%BC%9A%E4%BC%B0%E8%AE%A1%E6%BB%91%E5 ...
- HDU 5730 Shell Necklace(CDQ分治+FFT)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5730 [题目大意] 给出一个数组w,表示不同长度的字段的权值,比如w[3]=5表示如果字段长度为3 ...
- 有关VS2008制作安装包时遇到的问题详解
公司最近要做一个安装包,然而在做的时候遇到好多问题,这里我一一记录下来 一.先用VS2008建一个Setup项目,添加你需要打包的文件,这里我就不具体介绍了,网上一搜都好多,这时我们一般都需要在安装前 ...
- Jquery开发插件的方法
Jquery未开发插件提供了两个方法: (1)Jquery.extend(object) -为Jquery类本身添加新的方法;代码如下: $.extend({ add:function(a,b) ...
- .net-一般处理程序及生命周期
IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHandler):是 ...
- Visual format language
所谓的VFL语言其实就是Visual format language 的缩写,是一种使用代码添加约束的方式,类似于Masonry SDAutolayout的效果,但是操作起来可能要相对简单.一行代码 ...
- Problem E: Automatic Editing
Problem E: Automatic EditingTime Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 3[Submit][Status ...