1 pair的应用
pair:两个元素绑在一起作为一个合成元素。可以看成是两个元素的结构体。
struct pair
{
typeName1 first;
typeName2 second;
};
pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
如代码中使用
//一个string类型的变量和一个vector类型的变量组成一个SegReq作为参数写入vector传入函数
typedef pair<string, vector<float>> SegReq;
void GetSegRequire(vector<SegReq>& );
//格式
pair<typename1,typename2> name;
//例子
pair<string,int> p;
pair<string,int>("hello",1);
2.pair元素的访问
pair中只有两个元素,first和second。
pair<string,int> p;
p.first="hello";
p.second=3;
cout<<p.first<<" "<<p.second<<end;
3、pair常用函数
比较操作==,!=,<,<,<=,>,>=
比较的时候,先比较first,first相等才比较second
pair<int,int> p1(1,2);
pair<int,int> p2(2,3);
pair<int,int> p3(1,4);
if(p1<p2)printf("p1<p2\n");
if(p1<=p3)printf("p1<=p3\n");
if(p2<p3)printf("p2<p3\n");
当然也可以使用引用形参返回额外信息
#include<iostream>
#include<string>
using namespace std;
string::size_type FindChar(const string &s, char c, string::size_type &count)
{
auto ret = s.size(); //字符串总长,来控制循环,同时初始化初始化ret
count = 0;
for (decltype(ret) i = 0; i != s.size(); ++i) //decltype获取ret的类型
{
if (s[i] == c)
{
if (ret == s.size()) //巧妙使用ret == s.size() 去控制字符C第一次出现,以后都不在统计
ret = i;
++count; //上边if只是第一次进去一次,之后都不在进 以后遇到C都只加count
}
}
return ret;
}
void Test()
{
string s1("lilililililililililili");
string::size_type Count = 0;;
auto index = FindChar(s1,'l',Count);
cout << "第一次出现的位置:" << index << endl;
cout << "Count = " << Count << endl;
}
int main()
{
Test();
return 0;
}