亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++?primer超詳細(xì)講解關(guān)聯(lián)容器

 更新時(shí)間:2022年07月01日 09:37:21   作者:撲街男孩  
兩個(gè)主要的關(guān)聯(lián)容器為map和set,map中元素是一些關(guān)鍵字—值對(duì),關(guān)鍵字起索引的作用,值則表示與索引相關(guān)聯(lián)的數(shù)據(jù)。set中每個(gè)元素只包含一個(gè)關(guān)鍵字,set支持高效的關(guān)鍵字查詢操作——檢查一個(gè)給定關(guān)鍵字是否在set中

允許重復(fù)關(guān)鍵字的容器的名字開中都有包含單詞multi,不保持關(guān)鍵字按順序存儲(chǔ)的容器的名字都以u(píng)nordered開頭。

使用關(guān)聯(lián)容器

(1)經(jīng)典的map程序

單詞計(jì)數(shù)程序

map<string, size_t>word_count;
string word;
while (cin >> word)
	++word_count[word];
for (const auto& w : word_count)
	cout << w.first << " occurs " << w.second << " 次 " << endl;

(2)set的使用

//忽略exclude中的單詞進(jìn)行計(jì)數(shù)
map<string, size_t>word_count;
set<string> exclude = { "the","but" };
string word;
while (cin >> word)
	if(exclude.find(word)==exclude.end())
//find返回一個(gè)迭代器,指向該關(guān)鍵字,若不存在,則返回尾后迭代器
		++word_count[word];
for (const auto& w : word_count)
	cout << w.first << " occurs " << w.second << " 次 " << endl;

關(guān)聯(lián)容器概述

定義關(guān)聯(lián)容器

(1)mutiset使用的例子:

vector<int> v;
for (int i = 0; i != 10; i++)
{
	v.push_back(i);
	v.push_back(i);
}
set<int> is(v.begin(), v.end());
multiset<int> ms(v.begin(), v.end());
cout << is.size() << endl;  //輸出10
cout << ms.size() << endl;  //輸出20
cout << v.size() << endl;   //輸出20

pair類型

創(chuàng)建一個(gè)pair時(shí),我們必須提供兩個(gè)類型。

pair<string,int> p;

其中兩個(gè)成員分別命名為first和second,可以采用成員訪問符訪問他們。

創(chuàng)建pair對(duì)象的函數(shù)

有一個(gè)函數(shù)需要返回一個(gè)pair,我們可以對(duì)返回值進(jìn)行列表初始化

pair<string,int> process(vector<string> &v)
{
    //處理v
    if(!v.empty())
        return { v.back(),v.back().size()}  //列表初始化
    else
        return pair<string,int>(); //隱式構(gòu)造返回值
}

關(guān)聯(lián)容器操作

關(guān)聯(lián)容器迭代器

map<string,int> v;
auto map_it=v.begin()  //獲取一個(gè)指向v中一個(gè)元素的迭代器
//map_it是指向一個(gè)pair<const string,size_t>對(duì)象的引用
cout<<map_it->first;  //打印此元素的關(guān)鍵字
cout<<map_it->second  //打印此元素的值

(1)set的迭代器是const的

set的迭代器只允許只讀訪問set中的元素,set中的關(guān)鍵字也是const的,可以用一個(gè)set迭代器來讀取元素的值,但不能修改

set<int> s = { 0,1,2,3,4,5,6 };
set<int>::iterator it = s.begin();
if (it != s.end())
{
	*it = 42;  //無法修改
	cout << *it << endl;
}

添加元素

關(guān)聯(lián)容器的insert成員向容器中添加一個(gè)元素或一個(gè)元素范圍,由于map和set包含不重復(fù)的關(guān)鍵字,因此插入一個(gè)存在的元素對(duì)容器無影響。

vector<int> ivec={2,4,6,8}
set<int> set2;
set2.insert(ivec.begin(),ivec.end())
set2.insert({1,3,5,7})

insert有兩個(gè)版本,分別接受一對(duì)迭代器,或是一個(gè)初始化器列表。

(1)向map添加元素

m.insert({word,1})

(2)insert的返回值

對(duì)于不包含重復(fù)關(guān)鍵字的容器,添加單一元素的insert版本返回一個(gè)pair,pair的first成員是一個(gè)迭代器,指向具有給定關(guān)鍵字的元素,second成員是一個(gè)bool的值,指出元素是插入成功還是已經(jīng)存在于容器中,如果關(guān)鍵字已在容器中,則insert什么也不做,且返回值中的bool部分為false,若關(guān)鍵字不存在,元素被插入到容器中,且bool值為true。

刪除元素

關(guān)聯(lián)容器定義了三個(gè)版本的erase,可傳遞一個(gè)迭代器或一個(gè)迭代器對(duì)來刪除一個(gè)元素或一個(gè)元素范圍,指定元素被刪除后返回void。

另一個(gè)版本沒接收一個(gè)key_type參數(shù),此版本刪除所有匹配給定關(guān)鍵字的元素,返回實(shí)際刪除的元素?cái)?shù)量。

map的下標(biāo)操作

map的下標(biāo)運(yùn)算符接受一個(gè)索引(即關(guān)鍵字),獲取與此關(guān)鍵字相關(guān)聯(lián)的值,若關(guān)鍵字不在map中,則會(huì)為其創(chuàng)建一個(gè)元素并插入到map中,關(guān)鍵值將進(jìn)行值初始化。

訪問元素

c.find(k):返回一個(gè)迭代器,指向第一個(gè)關(guān)鍵字為k的元素,若k不在容器中,則返回尾后迭代器

c.count(k):返回關(guān)鍵字等于k的元素?cái)?shù)量,對(duì)于不允許重復(fù)關(guān)鍵字的容器,返回值永遠(yuǎn)是0或1

關(guān)鍵容器還提供兩個(gè)特殊的函數(shù),lower_bound和upper_bound,lower_bound返回的迭代器將指向第一個(gè)具有給定關(guān)鍵字的元素,而upper_bound返回的迭代器指向最后一個(gè)匹配給定關(guān)鍵的元素之后的位置。

到此這篇關(guān)于C++ primer超詳細(xì)講解關(guān)聯(lián)容器的文章就介紹到這了,更多相關(guān)C++關(guān)聯(lián)容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言二叉排序樹的創(chuàng)建,插入和刪除

    C語言二叉排序樹的創(chuàng)建,插入和刪除

    本文主要介紹了Java實(shí)現(xiàn)二叉排序樹的查找、插入、刪除、遍歷等內(nèi)容。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2021-10-10
  • C語言詳細(xì)講解指針數(shù)組的用法

    C語言詳細(xì)講解指針數(shù)組的用法

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-05-05
  • C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    C++ 強(qiáng)制類型轉(zhuǎn)換詳解

    這篇文章主要介紹的是C++ 強(qiáng)制類型轉(zhuǎn)換詳解,C語言中的強(qiáng)制轉(zhuǎn)換主要用于普通數(shù)據(jù)類型、指針的強(qiáng)制轉(zhuǎn)換,沒有類型檢查,轉(zhuǎn)換不安全,下面我們來看看其具體語法及詳細(xì)內(nèi)容
    2021-11-11
  • C++實(shí)現(xiàn)bmp格式圖像讀寫

    C++實(shí)現(xiàn)bmp格式圖像讀寫

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)bmp格式圖像讀寫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • APUE筆記之:進(jìn)程環(huán)境詳解

    APUE筆記之:進(jìn)程環(huán)境詳解

    本篇文章是對(duì)APUE 進(jìn)程環(huán)境詳解進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Opencv圖像處理之圖像增加邊框

    Opencv圖像處理之圖像增加邊框

    這篇文章主要為大家詳細(xì)介紹了Opencv圖像處理之圖像增加邊框,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)的問題詳解

    C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)的問題詳解

    這篇文章主要給大家介紹了關(guān)于C++中結(jié)構(gòu)體和Json字符串互轉(zhuǎn)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例

    C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例

    這篇文章主要介紹了C++實(shí)現(xiàn)動(dòng)態(tài)分配const對(duì)象實(shí)例,包括了const對(duì)象的創(chuàng)建、刪除及應(yīng)用實(shí)例,需要的朋友可以參考下
    2014-10-10
  • C語言詳解Z字形變換排列的實(shí)現(xiàn)

    C語言詳解Z字形變換排列的實(shí)現(xiàn)

    Z字形變換排列就是指將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列,下面讓我們用C語言來實(shí)現(xiàn)
    2022-04-04
  • 神奇的c/c++小游戲((提高你的編程興趣)

    神奇的c/c++小游戲((提高你的編程興趣)

    本文通過c/c++編寫小游戲,可以提高新手們的編程興趣,接下來我們一起來看看吧
    2021-08-08

最新評(píng)論