对组Pair -- STL库

Horizon 摸鱼 2024-03-08 14:35:24 2024-03-20 18:24:42 3

提供可以在一个存储单元内,可以存放两个相异的数据类型的路径。

头文件

#include

构造

  1. pair <类型1, 类型2> 标识符;
  2. pair <类型1, 类型2> 标识符 { 初始值1, 初始值2 }; //将两个初始值分别赋给两个位置
  3. pair <类型1, 类型2> p;

p = make_pair(初始值1, 初始值2);

实例

#include<bits/stdc++.h>
using namespace std;
template <class T1, class T2>

void printpair(const pair<T1, T2> & p) {
	cout << "p.first: " << p.first << "   p.second: " << p.second << endl;
}

int main() {
	// 1、默认构造函数 
	pair <int, string> p1;
	p1.first = 1;
	p1.second = "haha";
	cout << "1: "; printpair(p1);
	
	// 2、带初始值的构造函数
	pair <int, int> p2 {2, 2};
	cout << "2: "; printpair(p2); 
	
	// 3、利用已有的pair来构造新的pair 
	pair <int, int> p3 { p2 };
	cout << "3: "; printpair(p3); 
	
	// 4、利用pair对另一个pair赋值 
	pair <int, string> p4 {4, "hehe"};
	p1 = p4;
	cout << "4: "; printpair(p1);  
	
	// 5、在pair里面存放vector
	pair <int, vector<int>> p5 {1, {1, 5, 7}};
	cout << "5: p.first: " << p5.first << "   p.second: ";
	for(auto it = p5.second.begin(); it!=p5.second.end(); it++) {
		cout << *it << " ";
	}
	cout << endl;
	
	// 6、在vector里存放pair
	vector <pair<int, int>> vec;
	vec.push_back({1, 3});
	cout << "6: vec[0].first: " << vec[0].second << " vec[0].first: "
        << vec[0].second << endl;
    return 0;
}

运行结果

image.png

排序

使用sort排序对pair类型的数组进行排序时,其内部已经设置了排序规则

即优先按照first进行排序 再按照second排序

#include<bits/stdc++.h>
using namespace std;

struct NODE {
	int x, y;
	//重载
	bool operator < (const NODE& a) const {
		// 第一个变量不同时 按照第一个变量进行排序 
		if (x!=a.x) {
			return x < a.x;
		}
		// 第一个变量相同时 按照第二个变量进行排序 
		return y < a.y; 
	} 
}; 

int main() {
	// pair数组
	pair <int, int> p[2];
	p[0] = {1, 2};
	p[1] = {0, 4};
	
	cout << "排序前\n";
	cout << "p[0].first: " << p[0].first 
        << "   p[0].second: " << p[0].second << endl;
	cout << "p[1].first: " << p[1].first 
        << "   p[1].second: " << p[1].second << endl;
    
	// sort排序 --> 内置了排序规则 
    // 即优先按照first进行排序 再按照second排序
	sort(p, p+2); 
	
	cout << "排序后\n";
	cout << "p[0].first: " << p[0].first 
        << "   p[0].second: " << p[0].second << endl;
	cout << "p[1].first: " << p[1].first 
        << "   p[1].second: " << p[1].second << endl;
	return 0;
}

运行结果

image.png

{{ vote && vote.total.up }}