數據結構 —— 鍵值對 map

目錄

map的若干操作

1、emplace()

2、find(key)

3、count(key)

4、lower_bound 和 upper_bound

5、erase()

6、empty()

7、降序的map

計蒜客T3603 叫號系統

題意:

解題思路:

Code:

Leetcode1309 解碼字母到整數映射

題意:

解題思路:

Code:

Leetcode205 同構字符串

題意:

解題思路:

Code:

計蒜客T1271 完美K倍子數組

題意:

解題思路:

Code:


????????今天主要是map專題,一般map只是一個映射,在程序中大多是一個輔助的存在。不像前面的隊列和棧,它們特殊的結構有一些衍生的算法思想。而map主要是熟悉它的操作,可以更方便的查找。其實原本今天的題目和map關系不是特別大,但是寫到最后一題有很多相關的操作我都很少有用過,查了很多又改了好久才模擬出來。所以在最開始先盤點一下map常用的操作~


map的若干操作

map 鍵值對(key - value)

1、emplace()

功能:原地構造鍵值對,效率更高。
示例:

myMap.emplace(2, "banana"); // 直接構造,無需創建臨時對象

2、find(key)

功能:通過鍵查找目標,找到了就返回相應迭代器,如果沒找到返回end()。

示例:

auto it = myMap.find(2);
if (it != myMap.end())cout << "找到鍵 " << it->first << ": " << it->second;
else cout << "未找到";

3、count(key)

功能:查找此鍵的個數,由于每個鍵在map中只能出現一次,所以只會返回1或0,可用于判斷某個鍵是否存在。

示例:

if (myMap.count(3) > 0)cout << "鍵3存在";

4、lower_bound 和 upper_bound

功能

  • lower_bound:返回第一個大于等于?key?的迭代器。
  • upper_bound(key):返回第一個大于?key?的迭代器。

示例:

map<int, string> myMap = {{1, "a"}, {3, "c"}, {5, "e"}};
auto low = myMap.lower_bound(3); // 指向鍵3
auto up = myMap.upper_bound(3);  // 指向鍵5

5、erase()

功能:???????刪除指定元素。

示例:

myMap.erase(key);           // 按鍵刪除
myMap.erase(2);            // 刪除鍵2
myMap.erase(myMap.begin()); // 刪除第一個元素
myMap.erase(it);            // 按迭代器刪除
myMap.erase(first, last);   // 刪除區間 [first, last)

6、empty()

功能:判斷此時是否為空,返回值為bool類型。

示例:

if (myMap.empty()) cout << "容器為空";

7、降序的map

功能:由于map會自動進行排序,系統默認是升序排序,其實還可以降序

示例:

map<int, int, greater<int>> myMap;myMap[3] = 30;
myMap[1] = 10;
myMap[4] = 40;
myMap[2] = 20;// 輸出結果會是 4,3,2,1
for (auto i : myMap)cout << i.first << ":" << i.second << endl;

常用的函數基本就這些了,其實map的主要功能是映射,這些函數是錦上添花。下面看幾道題吧~

計蒜客T3603 叫號系統

鏈接:叫號系統 - 計蒜客

本題很好的考察了map的基本性質,比如排序,鍵、值的查找等。

題意:

????給定1~7七種操作,根據操作執行。

  • op=1:將id和u錄入系統;
  • op=2:找緊急程度最小的患者,輸出id并刪除.如果沒有輸出error;
  • op=3:找緊急程度最大的患者,輸出id并刪除.如果沒有輸出error;
  • op=4:將編號為id的病人緊急程度改為urg;
  • op=5:將緊急程度為urg的病人編號改為id;
  • op=6:查找標號為id的病人的urg并輸出,如果沒有輸出error;
  • op=7:查找緊急程度為urg的病人的id并輸出,如果沒有輸出error;

解題思路:

? ? ? ?本題是個大模擬,要對鍵、值的查找比較熟悉,操作比較多需要認真一點。

接下來直接看代碼吧。

Code:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int, int>
#define fi first
#define se second
#define endl '\n'
const int N = 1e6+5;
map<int, int> mp;
int id,u;//Id和緊急程度
int op;
void solve()
{cin >> op;if(op==1)//將id和u錄入系統{cin >> id >> u;mp[u]=id;//由于后面要找緊急程度的大小,所以按urg排序}if(op==2)//找緊急程度最小的患者,輸出id并刪除.如果沒有輸出error{if(mp.empty()){cout << "error" << endl;return ;}auto it = mp.begin();//迭代器類型索引用->cout << it->se << endl;mp.erase(it);}if(op==3)//找緊急程度最大的患者,輸出id并刪除.如果沒有輸出error{if(mp.empty()){cout << "error" << endl;return ;}auto it = --mp.end();//索引最后一個的時候用--end,end是最后一個的下一個cout << it->se << endl;mp.erase(it);}if(op==4)//將編號為id的病人緊急程度改為urg{cin >> id >> u;for(auto i:mp){if(i.se==id){auto it=mp.find(i.fi);mp.erase(it);mp[u]=id;break;}}}if(op==5)//將緊急程度為urg的病人編號改為id{cin >> id >> u;for(auto i:mp){if(i.fi==u){mp[u]=id;break;}}}if(op==6)//查找標號為id的病人的urg并輸出,如果沒有輸出error	{cin >> id;int f=0;for(auto i:mp){if(i.se==id){f=1;cout << i.fi << endl;return ;}}if(!f) cout << "error" << endl;}if(op==7)//查找緊急程度為urg的病人的id并輸出,如果沒有輸出error	{cin >> u;if(mp.find(u)==mp.end()){cout << "error" << endl;return ;}else{auto it=mp.find(u);cout << it->se << endl;}}
}
signed main()
{ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int t=1;cin >> t;while(t--) solve();return 0;
}

Leetcode1309 解碼字母到整數映射

鏈接:1309. 解碼字母到整數映射 - 力扣(LeetCode)

本題我直接用ASCII進行存值,但此題有點麻煩導致寫的時候感覺有點亂

題意:

????????根據題中給的解碼規則進行解碼。

解題思路:

? ? ? ? 1~9的解碼比較容易,10之后的有點麻煩,我是將數字和#分開判斷,注意的是10之后一次是占據三個位置,注意下標不要超。

Code:

class Solution {
public:string freqAlphabets(string s) {map<int, int> m;string s1="";for(int i=1; i<=26; i++) m[i]='a'+i-1;//創建鍵值對int i;for(i=0; i<s.size()-2; i++)//如果i在后兩個i+2會超{if(s[i+2]!='#') s1+=m[s[i]-'0'];else{int num=(s[i]-'0')*10+s[i+1]-'0';s1+=m[num];i+=2;}}if(i>s.size()-3)//單獨處理在后兩位的情況for(auto j=i; i<s.size(); i++) s1+=m[s[i]-'0'];return s1;}
};

Leetcode205 同構字符串

鏈接:205. 同構字符串 - 力扣(LeetCode)

題目其實還是比較簡單,需要注意的點就是所有的鍵和值都是唯一的。

題意:

? ? ? ? 給定兩個字符串看它們是否完全符合一定的映射規則。

解題思路:

? ? ? ? 按照所給字符串進行映射關系的建立和判斷,如果前后沖突則為否。

Code:

class Solution {
public:bool isIsomorphic(string a, string b) {map<int, int> m;//這里用字符的ASCII碼進行映射map<int, int> m1;for(int i=0; i<a.size(); i++){if(m[a[i]])//有值的話判斷值{if(m[a[i]]!=b[i])return 0;}else//沒值先判斷當前值是否被映射過{if(m1[b[i]]) return 0;m[a[i]]=b[i],m1[i]=1;//沒有就賦值,再標記一下表示被映射過}}return 1;}
};

計蒜客T1271 完美K倍子數組

鏈接:完美K倍子數組 - 計蒜客

這題大思路是對的,就是情況沒考慮周全。

題意:

? ? ? ? 給定一個長度為n的序列,找到一個子數組使得數組中的每個元素兩兩之和都是k的倍數。

解題思路:

? ? ? ? 由于數組中所有的數之和都是k的倍數,那首先很容易想到如果所有數都是它的倍數那么就都可以了。由于是兩兩之和,所以如果K為偶數的話,如果余數為k/2的數兩兩相加那么也一定是k的倍數。如果前面的情況都不是,那么當兩個數相加剛好等于k的倍數的時候那也可以,有點像昨天的某一道題。

Code:

unordered_map<int, int> m;//余數->出現次數
void solve()
{cin >> n >> k;for(int i=1; i<=n; i++)cin >> a[i],m[a[i]%k]++;if(k%2==0){//余數剛好是k/2/*例: 5 105 5 15 25 95*/for(int i=1; i<=n; i++) if(a[i]%k==k/2) num++;ans=max(ans,num);num=0;}for(int i=1; i<=n; i++) if(a[i]%k==0) num++;ans=max(ans,num),num=0;if(ans<2){for(int i=1; i<=n; i++) {int r = a[i]%k;//余數int c = (k-r)%k;//剛好和余數互補if(m[c]&&(m[c]>=2||(m[c]>= 1&&c!=r))){ans=2;break;}}}if(ans<2)cout << -1;else cout << ans;
}

總體來說題目依舊比較高質量,雖然沒什么算法,但也暴露出基本功的問題,不涉及算法的題還要修改好久,思路不夠靈敏,繼續加油吧!

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

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

相關文章

C++ 性能優化指南

C 性能優化指南&#xff08;針對 GCC 編譯器&#xff0c;面向高級工程師面試&#xff09; 代碼優化面試常問點&#xff1a; 如何避免不必要的對象拷貝&#xff1f;為什么要用引用或 std::move&#xff1f;虛函數調用有什么性能開銷&#xff1f;原理解釋&#xff1a; 傳遞對象時…

拼數(字符串排序)

題目描述設有 n 個正整數 a1?…an?&#xff0c;將它們聯接成一排&#xff0c;相鄰數字首尾相接&#xff0c;組成一個最大的整數。輸入格式第一行有一個整數&#xff0c;表示數字個數 n。第二行有 n 個整數&#xff0c;表示給出的 n 個整數 ai?。輸出格式一個正整數&#xff…

【MySQL】函數學習-字符串函數

一、MySQL字符串函數基礎回顧 在MySQL中&#xff0c;字符串函數用于處理文本數據&#xff0c;常見場景包括數據拼接、格式轉換、清洗等。以下是核心函數速覽&#xff1a;函數名作用說明基礎示例&#xff08;獨立運行&#xff09;CONCAT(s1,s2)拼接多個字符串SELECT CONCAT(heel…

AI不是“心智的蒸汽機“:重新理解人工智能的本質

當我們談論人工智能時&#xff0c;最常聽到的比喻是"心智的蒸汽機"——一個能夠自動化認知任務的強大工具。但這個比喻可能從根本上誤導了我們對AI真正潛力的理解。 最近&#xff0c;來自科羅拉多大學丹佛分校和肯尼索州立大學的研究團隊發表了一篇論文[1]&#xff0…

免費的AI Logo工具生成的Logo質量怎么樣?我對比了7個AI Logo生成器,設計必備

你嘗試過用 AI 生成 Logo 嗎&#xff1f;在 AI 巨火的今天&#xff0c;什么事情都可以嘗試用 AI 去做。在品牌設計上也是如此&#xff0c;用 AI 做品牌設計、用 AI 做電商海報、用 AI 做包裝設計等等。不知道你用過哪些 AI 工具&#xff0c;哪些是你覺得好用的。今天我們就來研…

計算機基礎:內存模型

專欄導航 上一篇&#xff1a;WIndows 編程輔助技能&#xff1a;格式工廠的使用 回到目錄 下一篇&#xff1a;MFC 第一章概述 本節前言 本來呢&#xff0c;沒想著在單獨的課節中講解內存模型。但是呢&#xff0c;在我寫過的一些個課節中&#xff0c;我發現&#xff0c;內存…

Sigma-Aldrich 細胞培養實驗方案 | 通過Hoechst DNA染色檢測細胞的支原體污染

目標DNA染色&#xff08;如間接Hoechst染色技術&#xff09;一種快速的方法&#xff0c;其可在72小時內獲得結果&#xff0c;這相較于通過培養分離檢測支原體所需的4周時間相比是更加有利的。用DNA染色劑對細胞系進行直接染色可在24小時內獲得結果&#xff0c;但會大大降低靈敏…

需求跟蹤深度解析:架構師視角下的全鏈路追溯體系

需求跟蹤&#xff08;Requirements Traceability&#xff09;是確保軟件系統從業務目標到代碼實現全程可追溯的核心實踐&#xff0c;尤其在安全關鍵系統&#xff08;如航空、醫療&#xff09;中具有強制性要求。一、需求跟蹤的四大核心價值變更影響分析 精確評估需求變更波及范…

《棒球規則介紹》領隊和主教練誰說了算·棒球1號位

Baseball 101&#xff5c;GM vs Manager 到底誰是球隊話事人&#xff1f; ??權力金字塔&#xff1a;誰說了算&#xff1f;General Manager&#xff08;總經理/GM&#xff09;球隊建筑師&#xff1a;負責選秀&#xff08;Draft&#xff09;、交易球員&#xff08;Trade&#x…

電力自動化的通信中樞,為何工業交換機越來越重要?

在“新能源數字化”雙輪驅動下&#xff0c;電力行業正經歷深刻變革&#xff0c;傳統變電站也迎來了向智能化、自動化加速轉型的時代。作為連接站內各級系統與裝置的數據“中樞”&#xff0c;工業以太網交換機已成為現代變電站自動化系統中不可或缺的核心設備。在這場深度重構的…

【Linux倉庫】命令行參數與環境變量【進程·伍】

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天來學習命令行參數與環境變量的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更多…

R 數據框:深入解析及其在數據分析中的應用

R 數據框:深入解析及其在數據分析中的應用 引言 R語言作為一種強大的統計計算和圖形工具,在數據分析領域有著廣泛的應用。數據框(DataFrame)是R語言中處理數據的一種重要結構,它類似于其他編程語言中的表格或關系數據庫中的表。本文將深入解析R數據框的概念、特點、創建…

機器學習數據集劃分全指南:train_test_split詳解與實踐

目錄 一、為什么需要劃分數據集&#xff1f; 二、train_test_split基礎用法 2.1 最簡單的劃分方式 2.2 參數說明 三、實際應用案例&#xff1a;Iris數據集劃分 四、高級技巧與注意事項 4.1 分層抽樣&#xff08;Stratified Sampling&#xff09; 4.2 時間序列數據劃分 …

python-77-數據序列化框架Avro數據格式編碼和解析

文章目錄 1 avro簡介1.1 關鍵特點1.2 無需標記2 使用步驟2.1 定義Avro模式2.2 編碼Avro數據2.3 解析Avro數據3 DataFileWriter和DataFileReader3.1 寫入DataFileWriter3.2 讀取DataFileReader3 文件中存儲16進制字符串3.1 十六進制字符串3.2 代碼示例4 接收kafka中的avro數據5 …

IAR攜手矽力杰與普華基礎軟件,共推RISC-V車規芯片高安全應用落地

芯片 基礎軟件 開發工具三方協同&#xff0c;賦能國產汽車電子加速自主演進 在“軟件定義汽車”持續重塑產業格局的當下&#xff0c;構建安全、高效、可擴展的本土汽車電子生態已成為行業共識。 IAR嵌入式開發解決方案現已全面支持矽力杰SA32B系列和即將量產的SA32D系列車規…

Vscode——報錯,加載 Web 視圖時出錯: Error: Could not register service worker

Vscode——報錯完整信息 加載 Web 視圖時出錯: Error: Could not register service worker: InvalidStateError: Failed to register a ServiceWorker: The document is in an invalid state… 很有意思下班前還是好的&#xff0c;上班發現下載的Ai code 無法正常使用了 解決…

Java-Collections、Map

目錄 1.可變參數 2.Collections工具類 不同集合類型的排序方法比較 3.斗地主游戲 4.Map集合 4.1 Map集合概述 4.2 Map集合的常用方法 4.3 Map集合的遍歷方式 4.4 Map集合案例—統計投票人數 4.5 HashMap 4.6 LinkedHashMap 4.7 TreeMap 5.集合的嵌套 1.可變參數 import …

開源界迎來重磅核彈!月之暗面開源了自家最新模型 K2

1. 模型簡介 Kimi K2 是一款尖端專家混合&#xff08;MoE&#xff09;語言模型&#xff0c;激活參數量達320億&#xff0c;總參數量突破1萬億。該模型采用Muon優化器訓練&#xff0c;在前沿知識、推理和編程任務中展現出卓越性能&#xff0c;同時針對智能體能力進行了精細化優…

Grok-4 發布會圖文總結

文章目錄00:00 - Grok-4&#xff1a;以“全球最智能 AI”之名突破性登場06:41 - 推理能力的大幅飛躍&#xff1a;100 倍訓練量鑄就的“博士級”大腦13:25 - 工具使用能力的革新&#xff1a;從“原始”到深度整合20:06 - 直面強化學習的挑戰與 AI 的終極測試26:45 - 應用演示&am…

AI產品經理面試寶典第1天:機器學習核心算法全景解析

面試官:請解釋什么是監督學習?能否用生活案例說明其運作邏輯? 監督學習如同教孩子識字的過程。父母指著"蘋果"圖片反復說"這是蘋果"(帶標簽的訓練數據),孩子逐漸建立"紅色圓形水果=蘋果"的認知模型(算法生成)。當孩子看到新圖片時,模型…