pair 和 string

pair

map是将key和value放在一起来保存,pair是更一般化地将2个数据组合成一组数据,另外当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个struct,主要的两个成员变量是first 和 second,因为是使用struct不是class(默认访问权限public),所以可以直接使用这两个成员变量。

头文件 #include <utility>, 类模板:template<class T1,class T2> struct pair。 T1和T2的类型可以不同

1
2
3
4
5
6
7
pair<T1, T2> p1;            //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
pair<T1, T2> p1(v1, v2); //创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。
make_pair(v1, v2); // 以v1和v2的值创建一个新的pair对象,其元素类型分别是v1和v2的类型。
p1 < p2; // 两个pair对象间的小于运算,其定义遵循字典次序:如 p1.first < p2.first 或者 !(p2.first < p1.first) && (p1.second < p2.second) 则返回true。
p1 == p2; // 如果两个对象的first和second依次相等,则这两个对象相等;该运算使用元素的==操作符。
p1.first; // 返回对象p1中名为first的公有数据成员
p1.second; // 返回对象p1中名为second的公有数据成员
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
pair<int ,double> p1;
p1.first = 1;
p1.second = 2.5;

pair<int, double> p2;
p2 = make_pair(1, 1.2);



std::pair<std::string, int> getPreson()
{
return std::make_pair("Sven", 25);
}

std::string name;
int ages;
std::tie(name, ages) = getPreson();
std::cout << "name: " << name << ", ages: " << ages << std::endl;

string的find 函数

find()返回值是元素在string中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos,是一个很大很大的数。返回值可以看成是一个int型的数

1
2
3
4
5
6
7
8
9
10
11
12
13
string s("12345");
string::size_type position;
// 返回34 在 s 中的下标位置
position = s.find("34");
//如果没找到,返回一个特别的标志c++中用npos表示,我这里npos取值是4294967295
if (position != s.npos)
{
printf("position is : %d\n" ,position);
}
else
{
printf("Not found\n");
}