日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

發布時間:2023/12/4 c/c++ 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++中 map的了解與基本用法(代碼演示)

一:map的基本認識

Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的數據處理能力,由于這個特性,它完成有可能在我們處理一對一數據的時候,在編程上提供快速通道。這里說下map內部數據的組織,map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對數據自動排序的功能,所以在map內部所有的數據都是有序的,后邊我們會見識到有序的好處。

二:map的基本操作函數(建議了解map常用的函數 以后用到啥 再學啥)

C++ Maps是一種關聯式容器,包含“關鍵字/值”對
begin() 返回指向map頭部的迭代器
clear() 刪除所有元素
count() 返回指定元素出現的次數
empty() 如果map為空則返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊條目的迭代器對
erase() 刪除一個元素
find() 查找一個元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比較元素key的函數
lower_bound() 返回鍵值>=給定元素的第一個位置
max_size() 返回可以容納的最大元素個數
rbegin() 返回一個指向map尾部的逆向迭代器
rend() 返回一個指向map頭部的逆向迭代器
size() 返回map中元素的個數
swap() 交換兩個map
upper_bound() 返回鍵值>給定元素的第一個位置
value_comp() 返回比較元素value的函數

三:map常用函數的代碼演示

1: map最基本的構造函數 map<關鍵字,鍵值> mapint

map<string , int >mapstring; map<int ,string >mapint;map<sring, char>mapstring; map< char ,string>mapchar;map<char ,int>mapchar; map<int ,char >mapint;

2:插入數據

#include<bits/stdc++.h> using namespace std;int main() {//構造方式 int 那個位置代表的是 關鍵字 而 string 那個位置代表的是 鍵值 map<int,string>m;// m[1]++; // m[2]++;// 插入數據 // 第一種方法:cout << "*****************************" << endl;cout << "第一種方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t; // for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl;//t->first表示關鍵字,t->second 表示鍵值 } cout << "*****************************" << endl;cout << "第二種方法插入 !" << endl;m[1] = "stu1";m[2] = "stu2";m[3] = "stu3";for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl; } }

3:查找數據

#include<bits/stdc++.h> using namespace std;int main() {//構造方式 int 那個位置代表的是 關鍵字 而 string 那個位置代表的是 鍵值 map<int,string>m;// m[1]++; // m[2]++;// 插入數據 // 第一種方法:cout << "*****************************" << endl;cout << "第一種方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t;cout << "*****************************" << endl;cout << "查找 !" << endl; t = m.find(1);if(t != m.end()){cout << "查找成功!" << endl; }else{cout << "查找失敗!" << endl; }}

4:刪除數據

#include<bits/stdc++.h> using namespace std;int main() {//構造方式 int 那個位置代表的是 關鍵字 而 string 那個位置代表的是 鍵值 map<int,string>m;// m[1]++; // m[2]++;// 插入數據 // 第一種方法:cout << "*****************************" << endl;cout << "第一種方法插入 !" << endl;m.insert(pair<int ,string>(1,"stu1"));m.insert(pair<int ,string>(2,"stu2"));m.insert(pair<int ,string>(3,"stu3"));map<int,string>::iterator t;for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl; } cout << "*****************************" << endl;cout << "刪除 !" << endl; t = m.find(2);m.erase(t);for( t = m.begin(); t != m.end(); t++ ){cout << t->first << ' ' << t->second << endl; } }

5:運行結果

四:map用法的補充

1.將map容器中(默認的遞增順序,改為遞減的順序(這里的順序指的是關鍵值))

#include<bits/stdc++.h> using namespace std;int main(){std::map<int, int, std::greater<int> > m; //map默認的遞增 ,這樣改成遞減的 //在創造map時,增加參數 **std::greater<int>**,就變成增加int a[5] = {5,4,3,2,1};map<int,int>::iterator t; for(int i = 0; i < 5; i++){m[i] = a[i];}for(t = m.begin(); t != m.end(); t++){cout << ' ' << t->first << ' ' << t->second << endl; } }

2:利用map容器實現一對多

/**思路:我們想要的結果是 一對多 即一個人對應好幾個課程號,可以用到map<string,vector<int>> 我還考慮了vector<int>v[2500],但是vector中不能表示成 一個字符串對應好幾個數所以選擇了map */ #include<bits/stdc++.h> using namespace std;int main(){int N,K;map<string,vector<int> >m; // 注意vector<int> 后面得加上空格 map<string,vector<int> >::iterator t;scanf("%d%d",&N,&K);for(int i = 1; i <= K; i++){int nums,a;// cin >> i >> nums;scanf("%d%d",&a,&nums);//這里不要輸入 i即便i是從1開始的for(int j = 0; j < nums; j++){// string str;// cin >> str;char ch[6];scanf("%s",ch);m[ch].push_back(a); } }for(int i = 0; i < N; i++){char name[6];scanf("%s",name);printf("%s %d",name,m[name].size()); //m[name].size() 輸出一個人選擇了多少門課程 sort(m[name].begin(),m[name].end());// for(int temp : m[name]){ // printf(" %d",temp); // }for(int j = 0; j < m[name].size(); j++){cout << ' ' << m[name][j]; } printf("\n");}}

3:利用map容器

m[num] 其默認值是為0;

總結

以上是生活随笔為你收集整理的C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。