国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ STL map

這篇具有很好參考價值的文章主要介紹了C++ STL map。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

map 中每一個元素都是一個 key-value 對,數(shù)據(jù)類型為 pair
std::pair 主要的作用是將兩個數(shù)據(jù)組合成一個數(shù)據(jù),兩個數(shù)據(jù)可以是同一類型或者不同類型。
pair 實質上是一個結構體,其主要的兩個成員變量firstsecond ,這兩個變量可以直接使用。

初始化一個 pair 可以使用構造函數(shù),也可以使用 std::make_pair 函數(shù),make_pair 函數(shù)的定義如下:
template pair make_pair(T1 a, T2 b) { return pair(a, b); }

一般 make_pair 都使用在需要 pair 做參數(shù)的位置,可以直接調用 make_pair 生成 pair 對象。

pair<string, int> student ("zhangsan", 17);  // name-age
student.first = "zhangsan"; 
student.second = 17; 

product3 = make_pair ("shoes",20.0);

Map、HashMap概念

  • MapSTL 的一個關聯(lián)容器,以鍵值對存儲的數(shù)據(jù),其類型可以自己定義,每個關鍵字在 map 中只能出現(xiàn)一次,關鍵字不能修改。map 也可以說關于 key-value 的映射。
  • HashMap 是基于哈希表實現(xiàn)的,每一個元素是一個 key-value 對。以空間換時間,是存儲 key-value 鍵值對的集合。

map、hashmap 的區(qū)別

  • hash_map 底層采用 hash 表存儲,map 一般采用紅黑樹實現(xiàn),所以 hash_mapkey 值是無序的,map 存儲是有有序的。
  • map 的優(yōu)點在于可以自動按照 Key 值進行排序,查找時間復雜度是log(n) ;hash_map 優(yōu)點在于它各項操作的平均時間復雜度接近常數(shù),即O(1).

引用頭文件

#include <map>

初始化賦值

  1. 使用初始化列表初始化map,并添加若干鍵值對
std::map<KeyType, ValueType> myMap = {
    {key1, value1},
    {key2, value2},
    // more key-value pairs
};
  1. 使用插入操作逐個添加元素到map中
std::map<KeyType, ValueType> myMap;
myMap.insert(std::make_pair(key1, value1));
myMap.insert(std::make_pair(key2, value2));
// more insertions

map 自定義 key 類型

如果要將自定義類型作為 map 的鍵值,將 less<key> 模板類示例化,重載 operator() 函數(shù)
另外,可以根據(jù) less 自定義 對 key 值進行特定排序

參考:https://blog.csdn.net/qq525003138/article/details/121306663

#include <iostream>
#include <string>
#include <map>
using namespace std;

struct student{
    student(string str, int a) : name(str), age(a) {};
    bool operator==(const student& stu2) const {
        return stu2.name == name && stu2.age == age;
    }
    string name;
    int age;
};

struct CompareClass {
public:
	// 函數(shù)const限定修飾符一定不要丟,必須和less<Key> 模板類保持一致
	bool operator()(const student& key1, const student& key2) const {
        return key1.name == key2.name && key1.age == key2.age;
	}
};

int main() {
    struct student stu1 = {"zhangsan", 17};
    map<student, string, CompareClass> students = {make_pair(stu1, "13班")};
    for(auto x : students) {
        cout<< x.first.name << " " << x.first.age << "歲 " << x.second << endl;
    }
	return 0;
}

map 的 value 自定義數(shù)據(jù)類型

unordered_map 的 value 自定義數(shù)據(jù)類型時,無特殊操作,按照常見數(shù)據(jù)類型操作即可

#include <iostream>
#include <string>
#include <map>
using namespace std;

struct student{
    student(string str, int a) : name(str), age(a) {};
    bool operator==(const student& stu2) const {
        return stu2.name == name && stu2.age == age;
    }
    string name;
    int age;
};

struct CompareClass {
public:
	// 函數(shù)const限定修飾符一定不要丟,必須和less<Key> 模板類保持一致
	bool operator()(const student& key1, const student& key2) const {
        return key1.name == key2.name && key1.age == key2.age;
	}
};

int main() {
    struct student stu1 = {"zhangsan", 17};
    map<string, student> students = {make_pair("13班", stu1)};
    for(auto x : students) {
        cout<< x.first << " " << x.second.name << " " << x.second.age << "歲 "  << endl;
    }
	return 0;
}

遍歷

  1. 迭代器遍歷
for ( auto it = name_Address.begin(); it != name_Address.end(); ++it )
        cout << " " << it->first << ":" << it->second;
  1. range for循環(huán)遍歷
for ( auto x : name_Address )
        cout << " " << x.first << ":" << x.second;
  1. 通過 key 索引

迭代器

迭代器只只支持 ++ -- 操作文章來源地址http://www.zghlxwxcb.cn/news/detail-676605.html

常用方法

方法 說明
at(key) 返回對與鍵 key 關聯(lián)的映射值
begin( ) 返回一個迭代器,它引用映射的第一個元素
end( ) 返回一個迭代器,它指向映射中的 past-the-end 元素
cbegin( ) 返回一個常量迭代器,它引用映射的第一個元素
cend( ) 返回一個常量迭代器,它指向映射的 past-the-end 元素
rbegin( ) 返回一個反向迭代器,它指向容器 i 的最后一個元素
rend( ) 返回一個反向迭代器,它指向容器中第一個元素之前的理論元素。
count(key ) 返回與鍵 key 關聯(lián)的映射值的數(shù)量
empty( ) 測試 map 是否為空
erase( m.begin() ) 從 m.begin() 移除映射的單個元素
find( key ) 查找與鍵 key 關聯(lián)的元素如果找到就返回key的迭代器,找不到返回 end()
insert( key:value ) 通過在映射中插入新元素來擴展容器
size( ) 返回映射中存在的元素數(shù)

插入

  1. 構造時插入 pari 類型
pair<string, int> student ("zhangsan", 17);
student.insert (student1); 
student.insert (make_pair<string, int>("lisi", 18)); 
  1. 構造時插入 數(shù)組 類型
// 初始化數(shù)組插入(可以用二維一次插入多個元素,也可以用一維插入一個元素)
student.insert ({{"zhangsan", 17}, {"lisi", 18}});
  1. 數(shù)組形式插入
//數(shù)組形式插入
myrecipe["coffee"] = 10.0;
  1. 插入指定位置
 m.insert(m.begin(), pair<char, int>('a', 1));
 m2.insert(m1.begin(), m1.end());

查找 key

map<string, int>::iterator get = student.find ("zhangsan");

if ( get == student.end() )
    cout << "not found";
else
    cout << "found "<<get->first << " is " << get->second<<"\n\n";

修改 value

student.at("zhangsan") = 18;
student["zhangsan"] = 17;

刪除元素

// 1. 通過位置
student.erase(student.begin());

// 2. 通過key
student.erase("milk");

// 3. void erase (iterator first, iterator last);
auto it = m.begin();
++it, ++it;

m.erase(m.begin(), it);

清空元素

student.clear();

到了這里,關于C++ STL map的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【C++ STL之map,set,pair詳解】

    在C++的STL(Standard Template Library)中,map是一個非常有用的關聯(lián)容器。它提供了一種鍵-值對的數(shù)據(jù)結構,其中的元素按照鍵的順序進行排序,并且每個鍵是唯一的。本文將詳細介紹C++ STL中map的使用方法和一些常見操作。 (1)頭文件 (2)初始化方法 可以使用以下方式聲明和

    2024年02月12日
    瀏覽(38)
  • 【C++】STL——set/multiset 和 map/multimap的使用

    【C++】STL——set/multiset 和 map/multimap的使用

    在初階階段,我們已經(jīng)接觸過STL中的部分容器 比如:vector、list、deque、forward_list(C++11)等,這些容器統(tǒng)稱為 序列式容器 ,因為其底層為線性序列的數(shù)據(jù)結構,里面存儲的是元素本身。 而今天我們要學習的幾個容器稱為關聯(lián)式容器,那什么是關聯(lián)式容器?它與序列式容器有什

    2024年02月14日
    瀏覽(26)
  • C++之STL整理(3)之map 用法(創(chuàng)建、賦值、方法)整理

    注:整理一些突然學到的C++知識,隨時mark一下 例如:忘記的用法,新,新數(shù)據(jù)結構 提示:本文為 C++ 中 map構造、賦值、接口 的寫法和舉例 ??STL 中的map是一個關聯(lián)容器,它存儲的元素都是 鍵值對 (key-value pair),并且 根據(jù)鍵(key)自動排序的容器 。map不允

    2024年04月26日
    瀏覽(28)
  • C++高級編程——STL:list容器、set容器和map容器

    本專欄記錄C++學習過程包括C++基礎以及數(shù)據(jù)結構和算法,其中第一部分計劃時間一個月,主要跟著黑馬視頻教程,學習路線如下, 不定時更新,歡迎關注 。 當前章節(jié)處于: ---------第1階段-C++基礎入門 ---------第2階段實戰(zhàn)-通訊錄管理系統(tǒng), ---------第3階段-C++核心編程, -----

    2024年01月25日
    瀏覽(23)
  • 【C++】STL——用一顆紅黑樹封裝出map和set

    【C++】STL——用一顆紅黑樹封裝出map和set

    我們都知道set是K模型的容器,而map是KV模型的容器,但是它倆的底層都是用紅黑樹實現(xiàn)的,上篇博文中我們模擬實現(xiàn)了一顆紅黑樹,接下來將對其進行改造,繼而用一顆紅黑樹封裝出map和set。 本質上map和set其內(nèi)部的主要功能都是套用了紅黑樹現(xiàn)成的接口,只是稍作改動即可

    2023年04月15日
    瀏覽(18)
  • 【C++】 使用紅黑樹模擬實現(xiàn)STL中的map與set

    【C++】 使用紅黑樹模擬實現(xiàn)STL中的map與set

    前面的文章我們學習了紅黑樹,也提到了C++STL中的map和set的底層其實就是用的紅黑樹來實現(xiàn)的(而map和set的使用我們前面也學過了)。 既然紅黑樹我們也學習過了,那這篇文章我們就用紅黑樹來簡單實現(xiàn)一下STL中的map和set,重點是學習它的框架。 上一篇文章我們實現(xiàn)了紅黑

    2024年02月12日
    瀏覽(23)
  • C++:stl中set(multiset)和map(multimap)的介紹和使用

    C++:stl中set(multiset)和map(multimap)的介紹和使用

    本文主要從概念、常用接口和使用方法方面介紹set(multiset)和map(multimap)。 目錄 一、概念介紹 1.關聯(lián)式容器 2.鍵值對 3. 樹形結構的關聯(lián)式容器 二、set和multiset 1.set的介紹 2.set使用 1. set模板參數(shù)列表 2. set構造 3. set迭代器 4. set容量 5. set修改操作 6.set使用舉例 3.multiset介紹 4.mul

    2024年02月08日
    瀏覽(25)
  • 【C++練級之路】【Lv.17】【STL】set類和map類的模擬實現(xiàn)

    【C++練級之路】【Lv.17】【STL】set類和map類的模擬實現(xiàn)

    快樂的流暢:個人主頁 個人專欄:《C語言》《數(shù)據(jù)結構世界》《進擊的C++》 遠方有一堆篝火,在為久候之人燃燒! STL庫中的set類和map類,其底層原理都是 通過紅黑樹來實現(xiàn) 的。盡管set和map可以各自實現(xiàn)一棵紅黑樹,但是為了提高代碼的復用率,STL庫中將紅黑樹進行了一定

    2024年04月16日
    瀏覽(30)
  • 【C++進階04】STL中map、set、multimap、multiset的介紹及使用

    【C++進階04】STL中map、set、multimap、multiset的介紹及使用

    vector/list/deque… 這些容器統(tǒng)稱為 序列式容器 因為其底層為線性序列的數(shù)據(jù)結構 里面存儲的是元素本身 map/set… 這些容器統(tǒng)稱為 關聯(lián)式容器 關聯(lián)式容器也是用來存儲數(shù)據(jù)的 與序列式容器不同的是 其里面存儲的是key, value結構的鍵值對 在數(shù)據(jù)檢索時比序列式容器效率更高 “鍵

    2024年02月03日
    瀏覽(24)
  • 【C++入門到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入門 ]

    【C++入門到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入門 ]

    歡迎各位大佬們的關顧,本文將介紹unordered系列容器以及其中的兩個重要成員: unordered_map 和 unordered_set 。unordered_map是一種無序的關聯(lián)容器,它使用哈希表來存儲鍵值對,并提供高效的插入、查找和刪除操作。在本文中,我們將首先介紹unordered_map的基本概念和特點,然后詳

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包