C++ 中pair的简单了解

类模板:

template<class T1,class T2> struct pair

参数:

T1是第一个值得数据类型,T2是第二个值的数据类型。

功能:

  1. pair将一对值组合成一个值,
  2. 这一对值可以具有不同的数据类型(T1和T2),
  3. 两个值可以分别用pair的两个公有函数first和second访问。

用法

1.定义:

  1. pair<int ,double> p1;//默认构造函数
  2. pair<int ,double> p2(1, 2.4);//用给定值初始化
  3. pair<int ,double> p3(p2);//拷贝构造函数
  4. pair<int ,double> p[10];  //pair数组

2.访问两个元素(通过first和second):

pair<int ,double> p1;
p1.first = 1;
p1.second = 2.5;
cout<<p1.first<<' '<<p1.second<<endl;

输出结果:1 2.5

3.赋值 :

(1)利用make_pair:

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

(2)变量间赋值:

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

4.比较:

pair的比较是按照字典序比较的,先比较first,如果first相等,再比较second,如果first,second都一样,等于就成立。

5.排序

可使用<algorithm>头文件中的sort函数对pair进行排序。假如存在一个pair数组,sort函数可使数组中的数据按first的大小进行排序,如果first相同,则再进一步按second排序。

代码示例

#include<iostream>
#include<algorithm>
using namespace std;

int main(){
	int a[5]={5,4,2,5,7};
	int b[5]={6,2,5,8,2};
	pair<int,int> d[5];
	for(int i=0;i<5;i++){
		d[i]=make_pair(a[i],b[i]);
	}
	cout<<"原始数据:"<<endl; 
	for(int i=0;i<5;i++)
		cout<<d[i].first<<" "<<d[i].second<<endl;
	
	sort(d,d+5);
	
	cout<<"使用sort排序后:"<<endl; 
	for(int i=0;i<5;i++)
		cout<<d[i].first<<" "<<d[i].second<<endl;
		
	return 0; 
}

 

 

参考于:

C++ pair(对组)的简单了解

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单c++校园导航程序,可以根据用户输入的起点和终点,输出最短路径和路线。 ```cpp #include <iostream> #include <vector> #include <queue> using namespace std; // 存储每个点的邻接点和对应边的距离 vector<pair<int, int>> graph[1000]; // 存储每个点的最短距离和是否访问过 int dist[1000]; bool visited[1000]; // 存储路径 vector<int> path; // Dijkstra算法求最短路 void Dijkstra(int start, int end) { // 初始化 for (int i = 0; i < 1000; i++) { dist[i] = INT_MAX; visited[i] = false; } dist[start] = 0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; pq.push(make_pair(0, start)); while (!pq.empty()) { int u = pq.top().second; pq.pop(); if (u == end) { break; } if (visited[u]) { continue; } visited[u] = true; for (int i = 0; i < graph[u].size(); i++) { int v = graph[u][i].first; int w = graph[u][i].second; if (!visited[v] && dist[u] + w < dist[v]) { dist[v] = dist[u] + w; pq.push(make_pair(dist[v], v)); } } } } // 输出最短路径 void printPath(int start, int end) { path.push_back(end); int u = end; while (u != start) { for (int i = 0; i < graph[u].size(); i++) { int v = graph[u][i].first; int w = graph[u][i].second; if (dist[u] == dist[v] + w) { path.push_back(v); u = v; break; } } } cout << "最短路径为:"; for (int i = path.size() - 1; i >= 0; i--) { cout << path[i]; if (i > 0) { cout << " -> "; } } cout << endl; } int main() { // 建图 graph[1].push_back(make_pair(2, 10)); graph[1].push_back(make_pair(6, 5)); graph[2].push_back(make_pair(1, 10)); graph[2].push_back(make_pair(3, 6)); graph[2].push_back(make_pair(4, 5)); graph[3].push_back(make_pair(2, 6)); graph[3].push_back(make_pair(4, 4)); graph[4].push_back(make_pair(2, 5)); graph[4].push_back(make_pair(3, 4)); graph[4].push_back(make_pair(5, 3)); graph[5].push_back(make_pair(4, 3)); graph[5].push_back(make_pair(6, 8)); graph[6].push_back(make_pair(1, 5)); graph[6].push_back(make_pair(5, 8)); // 输入起点和终点 int start, end; cout << "请输入起点和终点(1~6):"; cin >> start >> end; // 求最短路径 Dijkstra(start, end); printPath(start, end); return 0; } ``` 该程序建立了一个简单的无向图,每个点对应一个数字(1~6),通过输入起点和终点,使用Dijkstra算法求出最短路径,并输出路径。 ### 回答2: 校园导航c程序功能介绍: 校园导航是一个简单的C语言程序,用于帮助用户在校园找到不同建筑物的位置。该程序主要包括菜单功能和地点查询功能。 程序开始时,用户将看到一个主菜单,包括以下选项: 1. 显示所有建筑物及其位置 2. 查询某个建筑物的位置 3. 退出程序 如果用户选择菜单选项1,程序将显示所有建筑物及其位置的列表。列表的每个建筑物都有一个唯一的编号和名称。用户可以通过查找这个编号或名称来了解建筑物的位置。 如果用户选择菜单选项2,程序将提示用户输入要查询建筑物的编号或名称。程序将在建筑物列表查找与用户提供的查询信息匹配的结果,并显示该建筑物的位置。 如果用户选择菜单选项3,程序将退出。 程序实现代码示例: ```c #include <stdio.h> #include <string.h> // 建筑物结构体 typedef struct { int id; char name[50]; char location[100]; } Building; // 全局的建筑物列表 Building buildings[] = { {1, "教学楼A", "A校区一号楼"}, {2, "教学楼B", "B校区三号楼"}, {3, "图书馆", "B校区五号楼"} }; // 显示所有建筑物及其位置 void showBuildings() { int size = sizeof(buildings) / sizeof(Building); printf("建筑物列表:\n"); for (int i = 0; i < size; i++) { printf("%d. %s - %s\n", buildings[i].id, buildings[i].name, buildings[i].location); } } // 查询某个建筑物的位置 void searchBuilding() { int size = sizeof(buildings) / sizeof(Building); char query[50]; printf("请输入要查询的建筑物编号或名称:"); scanf("%s", query); for (int i = 0; i < size; i++) { if (strcmp(query, buildings[i].name) == 0 || atoi(query) == buildings[i].id) { printf("%s的位置是:%s\n", buildings[i].name, buildings[i].location); return; } } printf("未找到匹配的建筑物。\n"); } int main() { int choice; do { printf("\n校园导航菜单:\n"); printf("1. 显示所有建筑物及其位置\n"); printf("2. 查询某个建筑物的位置\n"); printf("3. 退出程序\n"); printf("请选择菜单选项:"); scanf("%d", &choice); switch (choice) { case 1: showBuildings(); break; case 2: searchBuilding(); break; case 3: printf("程序已退出。\n"); break; default: printf("无效的选项。\n"); break; } } while (choice != 3); return 0; } ``` 以上就是一个简单的校园导航C程序的实现。用户可以通过程序菜单选择查看建筑物列表或查询特定建筑物的位置。程序会根据用户的选择展示相应的结果。 ### 回答3: 校园导航C是一个简单的校园导航程序,主要帮助学生和访客在校园内快速找到目的地。该程序基于C语言编写,使用了简单的文本界面。 首先,用户启动程序后,会看到一个欢迎界面,提供了校园导航的功能和快捷键说明。用户可以通过输入不同的指令来实现不同的功能。 首先,用户可以输入指令查看校园地图,程序会显示校园的平面图,并用字符表示建筑物和道路。用户可以通过地图上的编号来查找特定的建筑物。 用户还可以选择输入指令来获取建筑物的具体信息。比如,输入编号或名称,程序会返回该建筑物的相关描述,以及周围环境说明和使用注意事项。 另外,程序还提供了路径导航功能。用户可以输入起点和终点的编号或名称,程序会通过路径算法计算出最短路径,并逐步指引用户前往目的地。 此外,用户还可以输入指令来查询校园内的服务设施和活动信息。比如,用户可以输入“食堂”或“图书馆”的关键词,程序会返回相关的服务设施信息和活动安排。 最后,用户可以通过输入“退出”指令来退出校园导航C程序。 总之,校园导航C是一个简单实用的校园导航程序,可以帮助用户快速找到校园内的目的地,方便学生和访客的校园生活。该程序使用了简单的文本界面,方便用户操作和查找信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值