【3-14 STC-pair超級詳細的解說】

1. pair的定義和結構

? 基礎概念:考察對std::pair模板類的理解,包括其頭文件(<utility>)和基本語法(pair<T1, T2>)。
? 成員訪問:測試對firstsecond成員變量的使用能力。
? 構造方式:如何通過構造函數或make_pair()函數創建pair對象(如 pair<int, string> p(1, "test"))。


2. pair的嵌套

? 多層嵌套結構:考察pair與其他容器(如vectormap)或自身嵌套的能力(如 pair<int, pair<string, float>>)。
? 復雜數據組織:可能涉及在嵌套pair中訪問多層數據(如 p.second.first)。
? 實際應用場景:例如用pair存儲坐標點(pair<int, int>)或鍵值對的組合(pair<string, map<int, float>>)。


3. pair的自帶排序規則

? 默認比較邏輯:理解pair的默認排序規則(先按first升序,若相等再按second升序)。
? 自定義排序:在需要打破默認規則時(如降序排序),如何通過自定義比較函數或Lambda表達式實現。
? 結合STL算法:例如在sort()函數中使用pair的排序特性處理容器數據。


考試題型推測

  1. 選擇題/填空題:考察pair的定義、成員變量、默認行為等基礎知識點。
  2. 簡答題:解釋pair的排序規則或嵌套應用場景。
  3. 編程題:完成基于pair的算法實現或數據操作。
  4. 代碼分析題:閱讀并改進包含pair的代碼邏輯。

重點應用方向

? STL容器結合pairmapvector等容器的聯合使用(如map的鍵值對本質是pair)。
? 算法優化:利用pair簡化多屬性數據的比較和排序邏輯。
? 工程實踐:在數據結構設計中靈活使用pair嵌套(如樹節點、圖邊權重的組合存儲)。

一些測試題


一、選擇題

  1. std::pair 的頭文件是?
    A. <algorithm>
    B. <utility>
    C. <vector>
    D. <map>
    答案:B

  2. 如何訪問pair對象的第二個成員?
    A. p.first
    B. p.second
    C. p.value
    D. p.key
    答案:B

  3. pair的默認排序規則是?
    A. 先按second升序,再按first升序
    B. 先按first升序,再按second升序
    C. 按內存地址排序
    D. 無序
    答案:B


二、填空題

  1. 聲明一個存儲intstringpair對象:
    答案: pair<int, string> p;

  2. 通過函數創建pair對象的語法:auto p = ___________(3, "hello");
    答案: make_pair

  3. 訪問嵌套pair的示例:pair<int, pair<char, float>> p;,要獲取char值應寫為:________
    答案: p.second.first


三、簡答題

  1. 簡述pair的默認排序規則,并舉例說明。
    答案:
    默認按first成員升序排序,若first相等則按second升序。
    例如:pair<int, int>(2,3)會排在pair<int, int>(2,5)之前。

  2. 如何對vector<pair<int, string>>first降序排序?寫出代碼片段。
    答案:

    sort(vec.begin(), vec.end(), [](const auto& a, const auto& b) {return a.first > b.first;
    });
    

四、編程題

  1. 題目: 定義一個嵌套pair結構pair<string, pair<int, float>>,表示學生姓名、年齡和成績。創建包含3個此類對象的vector,并按年齡升序排序后輸出。
    參考答案:
    #include <iostream>
    #include <utility>
    #include <vector>
    #include <algorithm>
    using namespace std;int main() {vector<pair<string, pair<int, float>>> students = {{"Alice", {20, 88.5}},{"Bob", {18, 90.0}},{"Charlie", {22, 85.0}}};sort(students.begin(), students.end(), [](const auto& a, const auto& b) {return a.second.first < b.second.first;});for (const auto& s : students) {cout << s.first << ": Age=" << s.second.first << ", Score=" << s.second.second << endl;}return 0;
    }
    

機器人的代碼看不太懂

#include <bits/stdc++.h>
using namespace std;
int main() {//pair<string,pair<int,float>>stu;vector<pair<string,pair<int,float>> >stu;stu.push_back({"xiaoMing",{23,89.9}});stu.push_back({"xiaoHong",{21,88.5}});stu.push_back({"xiaoTong",{28,98.5}});auto compare = [](const pair<string, pair<int,     float>>& a, const pair<string, pair<int, float>>& b) {return a.second.first < b.second.first; // 比較年齡};// 使用sort函數進行排序sort(stu.begin(), stu.end(), compare);for (const auto& student : stu) {cout << "Name: " << student.first << ", Age: " << student.second.first << ", Score: " << student.second.second << endl;}return 0;}
  1. 題目: 使用pair存儲坐標點(x, y),對vector<pair<int, int>>x升序排序,若x相同則按y降序排序。
    參考答案:
    sort(coords.begin(), coords.end(), [](const auto& a, const auto& b) {if (a.first == b.first) return a.second > b.second;return a.first < b.first;
    });
    

五、糾錯題

找出以下代碼的錯誤并修正:

pair<int, string> p = {5, "test"};
cout << p.second() << endl;  // 試圖輸出second成員

答案:
錯誤:second是成員變量而非函數,應去掉()
修正:cout << p.second << endl;

這個代碼也不錯


#include <iostream>
#include <utility>
#include <vector>// 定義一個結構體表示人的信息
struct Person {std::string name;int age;
};int main() {// 創建一個存儲Person對象的向量std::vector<Person> people;people.push_back({"Alice", 25});people.push_back({"Bob", 30});people.push_back({"Charlie", 20});// 創建一個存儲pair的向量,每個pair包含Person對象和評分std::vector<std::pair<Person, int>> scores;scores.push_back({people[0], 98});scores.push_back({people[1], 85});scores.push_back({people[2], 95});// 遍歷輸出每個pair的內容for (const auto& entry : scores) {std::cout << "Name: " << entry.first.name << ", Age: " << entry.first.age << ", Score: " << entry.second << std::endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72208.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72208.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器人觸覺的意義

機器人觸覺的重要性 觸覺在機器人領域至關重要&#xff0c;尤其是在自主操作、精細操控、人機交互等方面。雖然視覺和語音技術已高度發展&#xff0c;但機器人在現實世界中的操作仍然受限&#xff0c;因為&#xff1a; 視覺有局限性&#xff1a;僅憑視覺&#xff0c;機器人難…

RabbitMQ消息持久化與Lazy模式對比分析

RabbitMQ消息持久化與Lazy模式對比分析 在RabbitMQ中&#xff0c;消息持久化與Lazy模式是兩種不同的機制&#xff0c;分別針對消息可靠性、存儲優化等不同維度設計。以下從六個層面進行深度對比&#xff1a; 一、核心目標與作用對象差異 維度消息持久化&#xff08;delivery_…

Search-R1 、 R1-Searcher 和 Search-O1

原文鏈接:https://i68.ltd/notes/posts/20250307-search-r1/ Search-R1 DeepSeek團隊開發的SEARCH-R1模型通過強化學習&#xff0c;讓AI學會了自主搜索信息并將其與推理過程無縫結合&#xff0c;性能提升高達26%高效、可擴展的RL訓練框架&#xff0c;用于推理和搜索引擎調用&…

linux 命令 tail

tail 是 Linux 中用于查看文件末尾內容的命令&#xff0c;常用于日志監控和大文件快速瀏覽。以下是其核心用法及常見選項&#xff1a; 基本語法 tail [選項] 文件名 常用選項 顯示末尾行數 -n <行數> 或 --lines<行數> 指定顯示文件的最后若干行&#xff08;…

某乎x-zse-96加密算法分析與還原

文章目錄 1. 寫在前面2. 接口分析3. 加密分析4. 算法實現 【&#x1f3e0;作者主頁】&#xff1a;吳秋霖 【&#x1f4bc;作者介紹】&#xff1a;擅長爬蟲與JS加密逆向分析&#xff01;Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致…

Java常用算法

一、排序算法 排序算法是計算機科學中最基礎的算法之一&#xff0c;用于將一組數據按照特定順序排列。 1.1 冒泡排序&#xff08;Bubble Sort&#xff09; 通過重復遍歷列表&#xff0c;比較相鄰元素并交換位置&#xff0c;直到列表有序。時間復雜度&#xff1a;O(n)。 pub…

ubuntu 24 安裝 python3.x 教程

目錄 注意事項 一、安裝不同 Python 版本 1. 安裝依賴 2. 下載 Python 源碼 3. 解壓并編譯安裝 二、管理多個 Python 版本 1. 查看已安裝的 Python 版本 2. 配置環境變量 3. 使用 update-alternatives? 管理 Python 版本 三、使用虛擬環境為項目指定特定 Python 版本…

【后端】【django】Django 自帶的用戶系統與 RBAC 機制

Django 自帶的用戶系統與 RBAC 機制 Django 自帶的用戶系統&#xff08;django.contrib.auth&#xff09;提供了 身份驗證&#xff08;Authentication&#xff09; 和 權限管理&#xff08;Authorization&#xff09;&#xff0c;能夠快速實現 用戶管理、權限控制、管理員后臺…

怎樣使用Modbus轉Profinet網關連接USB轉485模擬從站配置案例

怎樣使用Modbus轉Profinet網關連接USB轉485模擬從站配置案例 Modbus轉profinet網關可以將Modbus協議轉化為profinet協議&#xff0c;以實現設備之間的數據交互。在實際使用過程中&#xff0c;我們需要使用Modbus協議進行設備通訊&#xff0c;而profinet協議則是用于工業自動化…

5.編譯鏈接和宏**

1. 宏&#xff08;考察很多&#xff09;-要求輕松實現宏&#xff0c;很容易出錯 #define 機制包括了一個規定&#xff0c;允許把參數替換到文本中&#xff0c;這種實現通常稱為宏或定義宏。 下面是宏的聲明方式&#xff1a; #define name(參數列表) 內容 參數列表的左括號必…

如何搭建一個適配微信小程序,h5,app的uni-app項目

在vscode搭建 uni-app 項目&#xff08;Vue 3 Vite Pinia uView Plus&#xff09; 一、環境準備 1. 安裝 Node.js 確保已安裝 Node.js&#xff08;需≥14版本&#xff09;&#xff0c;可通過以下命令檢查版本&#xff1a; node -v2. 安裝 VSCode 從 VSCode 官網 下載并…

Kotlin apply 方法的用法和使用場景

Kotlin apply 方法的用法和使用場景 1. 方法簡介 apply 是 Kotlin 標準庫中的一個擴展函數&#xff0c;用于對對象執行一系列操作&#xff0c;并返回該對象本身。它的語法如下&#xff1a; inline fun <T> T.apply(block: T.() -> Unit): T參數&#xff1a;block 是…

一文解讀python高階功能:匿名函數到魔法方法(__call__)

文章目錄 一、python中匿名方法的使用使用示例注意事項總結 二、匿名函數和魔法方法的結合示例&#xff1a;結合 lambda 和 __call__解釋更復雜的示例 總結 一、python中匿名方法的使用 在 Python 中&#xff0c;匿名方法是通過 lambda 關鍵字定義的&#xff0c;通常稱為 lamb…

云服務器新手配置內網穿透服務(frp)

首先你得有一個公網服務器&#xff0c;有了它你就可以借助它&#xff0c;將自己電腦進行配置內網穿透&#xff0c;讓自己內網電腦也可以異地輕松訪問。網上教程較多&#xff0c;特此記錄我自己的配置&#xff0c;避免迷路&#xff0c;我這里只記錄我自己云服務小白&#xff0c;…

基于STM32的火災報警設備(阿里云平臺)

目錄 前言&#xff1a; 一、項目介紹和演示視頻 二、硬件需求準備 三、硬件框圖 1. 原理圖 2. PCB 四、CubeMX配置 五、代碼框架 前言&#xff1a; 源代碼下載鏈接&#xff1a; https://download.csdn.net/download/m0_74712453/90474701 需要實物的可以私信博主或者…

學習筆記之車票搜索為什么用Redis而不是ES?

在文章正式開始前&#xff0c;大家打開 12306.cn 搜索一趟列車&#xff0c;根據搜索條件判斷&#xff0c;數據搜索技術使用 ElasticSearch 或者其它搜索技術是否合適&#xff1f; 這里我先把答案說下&#xff0c;12306 車票搜索用的是 Redis &#xff0c;而不是大家常用的 Ela…

揭秘AI:機器學習與深度學習的奧秘

文章目錄 機器學習與深度學習1. 什么是人工智能&#xff1f;2. 機器學習、深度學習和人工智能又是什么關系&#xff1f;3. 人工智能解決了什么問題&#xff1f;為什么需要人工智能&#xff1f;4. 機器學習、深度學習常用術語1&#xff09;模型2&#xff09;數據集3&#xff09;…

【具體場景實踐】使用存儲過程查數據全流程+自動調度

文章目錄 場景設計場景描述:公司員工管理系統需求1. 創建數據庫和表2. 插入測試數據3. 復雜存儲過程4. 調用存儲過程5. 結果示例6. 細節優化存儲過程總結7. 自動定期執行存儲過程7.1 啟用 MySQL 事件調度器7.2 創建定時任務(每天凌晨 2 點自動執行)7.3 查看和管理事件1?? …

【ubuntu】——wsl中使用windows中的adb

一、引言 在 Windows Subsystem for Linux&#xff08;WSL&#xff09;環境下工作時&#xff0c;有時需要使用 Android Debug Bridge&#xff08;ADB&#xff09;工具與 Android 設備進行交互。通過特定設置&#xff0c;能夠在 WSL 中便捷地調用 Windows 系統中已安裝的 ADB&a…

Centos離線安裝gcc

文章目錄 Centos離線安裝gcc1. gcc是什么&#xff1f;2. gcc下載地址3. gcc的安裝4. 安裝結果驗證 Centos離線安裝gcc 1. gcc是什么&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 項目下的開源編譯器套件&#xff0c;主要用于將 C、C 等編程語言的源…