vector向量容器元素排序与查找
1.利用标准库函数sort()对vector进行排序
参考源码:
#include <algorithm>
#include <vector>
vector<int> vec;
//比较函数,这里的元素类型要与vector存储的类型一致
bool compare(int a,int b)
{
return a<b; //升序排列
}
std::sort(vec.begin(),vec.end(),compare);
注意:
sort()函数原型申明如下:
template <class RandomAccessIterator>
void sort (RandomAccessIterator first, RandomAccessIterator last);
template <class RandomAccessIterator, class Compare>
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
若不自定义比较函数,默认是按照升序排序。
2.利用标准库函数find()对vector进行查找
vector向量容器没有提供根据元素查找的成员,可使用find函数来完成。
参考源码:
vector<int> vec;
int a=10;
vector<int>::iterator it=find(vec.begin(),vector.end(),a);
find()原型:
template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);
- 1
- 2
3.构造类型在vector中的排序与查找
将构造类型,比如struct的对象存储在vector中,查找时,需要重载等于运算符(operator==),具体实现参考如下代码。
struct Element{
public:
int a;
int b;
Element(int a,int b){
this->a=a;
this->b=b;
};
bool operator==(const Element& ele){
return a==ele.a&&b==ele.b;
};
};
//自定义比较函数
bool compare(const Element& left,const Element& right){
return left.a<right.a; //升序排列
}
//重载输出操作符<<,格式化输出Element
ostream& operator<<(ostream& coutU,const Element& ele){
coutU<<"a:"<<ele.a<<",b:"<<ele.b;
return coutU;
}
int main(){
vector<Element> vecEle;
vecEle.push_back(Element(4,4));
vecEle.push_back(Element(1,1));
vecEle.push_back(Element(2,2));
vecEle.push_back(Element(3,3));
//sort
std::sort(vecEle.begin(),vecEle.end(),compare);
for(int i=0;i<vecEle.size();++i){
cout<<vecEle[i]<<endl;
}
//查找Element(4,4)
vector<Element>::iterator it=find(vecEle.begin(),vecEle.end(),Element(4,4));
cout<<"found "<<*it<<endl;
}
程序输出:
a:1,b:1
a:2,b:2
a:3,b:3
a:4,b:4
found a:4,b:4
参考文献
[1]C++ reference std::sort.
[2]C++ reference std::find.
vector向量容器元素排序与查找的更多相关文章
- 学习笔记之vector向量容器
今天复习到vector向量容器,里面包括vector向量容器的一些优点以及具体的使用方法及代码,分享给大家. Vector向量容器不但能够像数组一样对元素进行随机访问,还可以在尾部插入元素,是一种简单 ...
- vector向量容器(常用的使用方法总结)
关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...
- vector向量容器
vector向量容器不但可以像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单高效的容器,可以代替数组. vector具有内存自动管理的功能,对于元素的插入和删除,可以动态的调整所占内存. ...
- C++STL之vector向量容器
vector向量容器 vector向量容器不但能向数组一样对元素进行随机访问, 还能在尾部插入元素 vector具有内存自动管理的功能, 对于元素的插入和删除, 可动态调整所占的内存空间 vect ...
- 标准模板库使用参考——vector向量容器
C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法. 在C++标准库中,ST ...
- C++从array数组向vector向量复制元素的两种方式
#include <iostream> #include <vector> using namespace std; int main() { const int arr_si ...
- vector 向量容器用法祥解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: ...
- C++ STL vector(向量容器)的使用(附完整程序代码)
一.简单介绍 Vectors 包括着一系列连续存储的元素,其行为和数组类似. 訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元 ...
- 利用copy函数简单快速输出/保存vector向量容器中的数据
如果要输出vector中的数据我们可以通过循环语句输出,更加简便的方法是利用copy函数直接输出,例子: #include "stdafx.h" #include <iost ...
随机推荐
- HTML文本/文字竖直方向/纵向显示
HTML vertical text (Safari, Firefox, Chrome, and Opera) .vText { -moz-transform: rotate(-90deg) tran ...
- Mysql -- SQL常用命令实例
sql: structured query language(结构化查询语言) 用户名和密码:root 创建一个名称为mydb1的数据库. create database mydb1; 查看所有数据库 ...
- 使用log4j2打印Log,log4j不能打印日志信息,log4j2不能打印日志信息,log4j和logj2,idea控制台信息乱码(文末)
说来惭愧,今天就写了个"hello world",了解了一下log4j的日志. 本来是想在控制台打印个log信息,也是遇到坎坷重重,开始也没去了解log4j就来使用,log4j配置 ...
- Spring初学之annotation实现AOP前置通知和后置通知
实现两个整数的加减乘除,并在每个计算前后打印出日志. ArithmeticCalculator.java: package spring.aop.impl; public interface Arit ...
- PrepareStatement
import java.sql.DriverManager; import java.sql.Connection; import java.sql.PreparedStatement; import ...
- SPOJ375 QTREE - Query on a tree
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- pg_stat_activity存储postgresql当前连接个数
postgres=# \d pg_stat_activity 视观表 "pg_catalog.pg_stat_activity" 栏位 | 型别 | 修饰词------------ ...
- 深入理解Servlet3.0异步请求
异步请求的基础概念 异步请求最直接的用法就是处理耗时业务,Http协议是单向的,只能客户端拉不能服务器主推. 异步请求的核心原理主要分为两大类:1.轮询.2长连接 轮询:就是定时获取返回结果. 长连接 ...
- ES6-Set和Map数据结构学习笔记
Set和Map数据结构 Set 基本用法 ES6提供了新的数据结构--Set,类似于数组,但是成员的值是唯一的,没有重复的值,Set本身是一种构造函数,用来生成Set数据结构 var s = new ...
- HDU 2203 kmp
http://acm.hdu.edu.cn/showproblem.php?pid=2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory ...