两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1. Multiset

Multiset是set集合容器的一種,其擁有set的全部內(nèi)容,在此基礎(chǔ)之上,multiset還具備了可以重復(fù)保存元素的功能,因此會有略微和set的差別。

Multise容器在執(zhí)行insert()時(shí),只要數(shù)據(jù)不是非法數(shù)據(jù)和空數(shù)據(jù),insert就總是能夠執(zhí)行,無論時(shí)一個(gè)數(shù)據(jù)還是一段數(shù)據(jù)。

Multiset容器中的find()函數(shù)回返回和參數(shù)匹配的第一個(gè)元素的迭代器,即時(shí)存在多個(gè)元素也只是返回第一個(gè),如{10,20,20,20}搜索20進(jìn)行匹配將會返回第二個(gè)參數(shù),如果沒有符合的參數(shù)則結(jié)束迭代器。

同理諸如lower_bound()等的需要進(jìn)行一個(gè)位置的返回值,則統(tǒng)統(tǒng)返回第一個(gè)發(fā)現(xiàn)的值。

以下是一個(gè)舉例:

#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
 
int main(){
    multiset<int> ms;
    ms.insert(10);
    ms.insert(20);
    ms.insert(10);
    ms.insert(20);
    ms.insert(30);
    ms.insert(50);
    //{10,20,10,20,30,50}  -----> {10,10,20,20,30,50} 插入時(shí)即會自動排序
    cout<< "發(fā)現(xiàn)20的位置在" << *ms.find(20)<<endl;   //這樣是找不出來的喲
    
    int i=0;
    for(multiset<int>::iterator it=ms.begin();it!=ms.find(20);it++,i++){}
    cout<< "發(fā)現(xiàn)20的位置在" << i <<endl;    //由于是從0開始計(jì)算的因此答案是2
 
    return 0;
}

舉例使用find進(jìn)行查詢了集合元素的位置,我們可以發(fā)現(xiàn),這樣使用實(shí)則麻煩而且浪費(fèi)算力,的確,STL中提供的迭代器的思路是:提供一種方法順序訪問一個(gè)聚合對象中各個(gè)元素,而又不需暴露該對象的內(nèi)部表示。

也就是說,我們使用迭代器進(jìn)行訪問的時(shí)候,迭代器是不會告訴你你需要訪問的元素是數(shù)據(jù)內(nèi)部的第幾個(gè)位置,這樣匿名的思路對于工程的設(shè)計(jì)是有幫助的。

2. Multimap容器

Multimap時(shí)map映射容器的一種,其擁有map的全部內(nèi)容,并在此基礎(chǔ)之上,multimap還具有了可以重復(fù)保存元素的功能,與上文的mutliset差不多,任何進(jìn)行訪問單個(gè)值得語句訪問均只會返回第一個(gè)位置,這里不再多說,而是舉一個(gè)實(shí)際中可能用得到得例子。

 

有沒有一種方法,使得一個(gè)key值能夠?qū)?yīng)多個(gè)value,產(chǎn)生一種諸如一個(gè)學(xué)生有多門考試成績一樣的映射

我們都知道m(xù)ap關(guān)聯(lián)容器是使得一個(gè)數(shù)據(jù)與另一個(gè)數(shù)據(jù)發(fā)生映射的容器,通過key得到value產(chǎn)生一一對應(yīng),那么multimap在此基礎(chǔ)上使得map元素可以重復(fù),因此這種情況可以使用multimap

#include <iostream>
#include <string>
#include <map>
using namespace std;
 
int main(){
    multimap<string, int> m_map;
    string name="XiaoMing";
    m_map.insert(make_pair(name, 50));
    m_map.insert(make_pair(name, 55));
    m_map.insert(make_pair(name, 60));
    //方式1
    cout<<"----------方法1-----------"<<endl;
    int k;
    multimap<string, int>::iterator m;
    m = m_map.find(name);
    for (k = 0; k != m_map.count(name); k++, m++)
        cout << m->first << "--" << m->second << endl;
    //方式2
    cout<<"----------方法2-----------"<<endl;
    multimap<string, int>::iterator beg, end;
    beg = m_map.lower_bound(name);
    end = m_map.upper_bound(name);
    for (m = beg; m != end; m++)
        cout << m->first << "--" << m->second << endl;
    //方式3
    cout<<"----------方法3-----------"<<endl;
    beg = m_map.equal_range(name).first;
    end = m_map.equal_range(name).second;
    for (m = beg; m != end; m++)
        cout << m->first << "--" << m->second << endl;
    return 0;
}

方法一:標(biāo)準(zhǔn)的iterator的訪問方法,通過find函數(shù)找到所需要知道的關(guān)系”XiaoMing”的位置,再進(jìn)行”XiaoMing”的計(jì)數(shù),輸出共”XiaoMing”數(shù)量個(gè)數(shù)的元素內(nèi)容,以達(dá)到需求目的。

方法二:通過lower_bound和upper_bound找到”XiaoMing”的范圍進(jìn)行輸出。

方法三:通過equal_range獲取全部的”XiaoMing”內(nèi)容的元素,再通過迭代器進(jìn)行輸出。

 

這三種方法思想大同小異,請自主取舍進(jìn)行鞏固學(xué)習(xí)


點(diǎn)贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個(gè)爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時(shí)間)