91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

set,map相關操作

發布時間:2020-08-05 12:51:49 來源:網絡 閱讀:436 作者:匯天下豪杰 欄目:移動開發

1、set的基本操作

(1)、set的刪除、插入操作

代碼如下:

#include<iostream>
#include<set>
using namespace std;

//set底層是紅黑樹,其所包含的元素是唯一的,集合中的元素按一定的順序排列,元素插入過程是按排序規則插入,所>
以不能指定插入位置;
int main(void){
    //set 集合 元素唯一 自動排序(默認情況下是從小到大) 不能按照[]方式插入元素 底層紅黑樹
    
    set<int> set1;

    for(int i = 0; i < 5; i++){
        set1.insert(34);
        set1.insert(24);
        set1.insert(14);
        set1.insert(84);
        set1.insert(-4);
    }   
    //插入重復的元素
    set1.insert(100);
    set1.insert(100);
    set1.insert(100);
    set1.insert(100);

    set<int>::iterator it; 
    for(it = set1.begin(); it != set1.end(); it++){
        cout<<*it<<" ";
    }
    cout<<endl;

    //刪除集合中的元素
    while(!set1.empty()){
        set<int>::iterator it = set1.begin();
        cout<<*it<<" ";
        set1.erase(set1.begin());
    }
    cout<<endl;
    return 0;
}

(2)、set的排序

代碼如下:

#include<iostream>
#include<set>
using namespace std;

//對于基礎數據可以進行排序,復雜數據類型的排序是怎么回事?------>仿函數解決
int main(void){
    set<int> set1; //默認排序從小到大
    set<int, less<int> > set2; //集合是從小到大
    set<int, greater<int> > set3; //集合從大到小的輸出;

    for(int i = 0; i < 5; i++){
        set3.insert(11);
        set3.insert(45);
        set3.insert(99);
        set3.insert(77);
        set3.insert(66);
    }   

    //從大到小的排序
    set<int, greater<int> >::iterator it; 
    for(it = set3.begin(); it != set3.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;

    return 0;
}

(3)、set中為復雜數據類型時的排序

代碼如下:

#include<iostream>
#include<string.h>
#include<set>
using namespace std;

class Student{
    public:
        Student(const char *name, int age){
            strcpy(this->name, name);
            this->age = age;
        }
    public:
        char name[32];
        int age;

};

//仿函數:重載了(),
struct FunStudent{
    bool operator()(const Student &left, const Student &right){
        if(left.age < right.age){ //左邊的小,就返回為真!!從小到大進行排序
            return true;
        }else{
            return false;
        }
    }
};
int main(void){
/*  
    Student s1("s1", 31);
    Student s2("s2", 22);
    Student s3("s3", 55);
    Student s4("s4", 11);
    Student s5("s5", 31); //如果2個31歲,能插入成功嗎?
    //如何知道插入的結果,看函數的返回值
    
    set<Student, FunStudent> set1; //集合中插入的是學生類型(復雜數據類型),會調用這個仿函數
    set1.insert(s1);
    set1.insert(s2);
    set1.insert(s3);
    set1.insert(s4);
    set1.insert(s5);

    set<Student, FunStudent>::iterator it;
    for(it = set1.begin(); it != set1.end(); it++){
        cout<<it->age<<" "<<it->name<<endl; 
    }
*/
    //如何判斷set1.insert()函數的返回值
    Student s1("s1", 31);
    Student s2("s2", 22);
    Student s3("s3", 55);
    Student s4("s4", 11);
    Student s5("s5", 31); //此時,由于比較的是age,所以將會插入失敗,因為仿函數中用的是age做的鍵值;
    
    set<Student, FunStudent> set1; //集合中插入的是學生類型(復雜數據類型),會調用這個仿函數
    pair<set<Student, FunStudent>::iterator, bool> pair1 = set1.insert(s1);
    if(pair1.second == true){ //insert()的返回值是pair(對組)類型;
        cout<<"插入s1成功"<<endl;
    }else{
        cout<<"插入s1失敗"<<endl;
    }
    set1.insert(s2);
    set1.insert(s3);
    set1.insert(s4);
    pair<set<Student, FunStudent>::iterator, bool> pair5 = set1.insert(s5);
    if(pair5.second == true){
        cout<<"插入s1成功"<<endl;
    }else{
        cout<<"插入s1失敗"<<endl;
    }

    set<Student, FunStudent>::iterator it;
    for(it = set1.begin(); it != set1.end(); it++){
        cout<<it->age<<" "<<it->name<<endl;
    }

    return 0;
}

(4)、set中迭代器的使用

代碼如下:

#include<iostream>
#include<algorithm>
#include<set>
using namespace std;


//返回值為pair的類型要學會使用;
int main(void){
    set<int> set1;

    for(int i = 0; i < 10; i++){
        set1.insert(i+1);
    }   

    set<int>::iterator it; 
    for(it = set1.begin(); it != set1.end(); it++){
        cout<<*it<<" "; 
    }   
    cout<<endl;

    set<int>::iterator it0 = set1.find(5);
    cout<<"it0:"<<*it0<<endl;

    int num1 = set1.count(5);
    cout<<"num1:"<<num1<<endl;

    set<int>::iterator it1 = set1.lower_bound(5);  //大于等于5的元素的迭代器的位置
    cout<<"it1:"<<*it1<<endl;

    set1.erase(5);  //刪除容器中值為5的所有元素
    pair<set<int>::iterator, set<int>::iterator> mypair = set1.equal_range(5); //函數的返回值為對組
    cout<<*mypair.first<<endl; //迭代器中第一個找的是大于等于5的
    cout<<*mypair.second<<endl;  //代器中的第二個找的是大于5的

    return 0;
}


2、multiset的基本操作

代碼如下:

#include<iostream>
#include<set>
using namespace std;

int main(void){
    multiset<int> set1;
    int tmp = 0;

    cout<<"請輸入multiset集合中的值:";
    cin>>tmp;

    while(tmp != 0){ 
        set1.insert(tmp);
        cout<<"請輸入multiset集合中的值:";
        cin>>tmp;
    }   

    multiset<int>::iterator it; 
    for(it = set1.begin(); it != set1.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;

    while(!set1.empty()){
        multiset<int>::iterator it = set1.begin();
        cout<<*it<<" ";
        set1.erase(it);
    }
    cout<<endl;

    return 0;
}


3、map的基本操作

(1)、map元素的添加、遍歷、刪除

代碼如下:

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

//map元素的添加、遍歷、刪除
int main(void){
    map<int, string> map1;
    //因為map是key-value結構,所以可以做成pair(對組)
    //初始化map:
    //方法1、
    map1.insert(pair<int, string>(1, "teacher01"));
    map1.insert(pair<int, string>(2, "teacher02"));
    //方法2、
    map1.insert(make_pair(3, "teacher03"));
    map1.insert(make_pair(4, "teacher04"));
    //方法3、
    map1.insert(map<int, string>::value_type(5, "teacher05"));
    map1.insert(map<int, string>::value_type(6, "teacher06"));
    //方法4、
    map1[7] = "teacher07";
    map1[8] = "teacher08";


    //容器的遍歷
    map<int, string>::iterator it; 
    for(it = map1.begin(); it != map1.end(); it++){
        cout<<it->first<<" "<<it->second<<endl;   //map的遍歷,跟pair(對組)一樣,first表示第一個(鍵key),
second表示第二個(值value);
    }
    cout<<"遍歷結束"<<endl;

    //容器的刪除
    while(!map1.empty()){
        map<int, string>::iterator it = map1.begin();
        cout<<it->first<<" "<<it->second<<endl;
        map1.erase(it);
    }

    return 0;
}

(2)、map中4種初始化的分析

代碼如下:

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

//前三種初始化方法的返回值都為:pair(iterator, bool)
//插入四中方法的異同
//結論:前三種方法,若key已經存在,此時在進行插入,將會報錯;
//方法4、若key已經存在,則修改;
int main(void){
    map<int, string> map1;
    //方法1、
    pair<map<int, string>::iterator, bool>  mypair1 = map1.insert(pair<int, string>(1, "teacher01"));
    map1.insert(pair<int, string>(2, "teacher02"));
    //方法2、
    pair<map<int, string>::iterator, bool>  mypair3 = map1.insert(make_pair(3, "teacher03"));
    map1.insert(make_pair(4, "teacher04"));
    //方法3、
    pair<map<int, string>::iterator, bool>  mypair5 = map1.insert(map<int, string>::value_type(5, "tea
cher05"));
    if(mypair5.second != true){
        cout<<"key 5插入失敗"<<endl;
    }else{  
        cout<<mypair5.first->first<<" "<<mypair5.first->second<<endl;
    }       
    pair<map<int, string>::iterator, bool>  mypair6 = map1.insert(map<int, string>::value_type(5, "tea
cher06"));
    if(mypair6.second != true){
        cout<<"key 5插入失敗"<<endl; //因為鍵值相同,所以插入會失敗;
    }else{
        cout<<mypair6.first->first<<" "<<mypair6.first->second<<endl;
    }

    //前三種初始化方法的返回值都為:pair(iterator, bool)

    //方法4、
    map1[7] = "teacher07";
    map1[7] = "teacher08";

    map<int, string>::iterator it;
    for(it = map1.begin(); it != map1.end(); it++){
        cout<<it->first<<"\t"<<it->second<<endl;
    }
    cout<<"遍歷結束"<<endl;

    return  0;
}

(3)、map查找

代碼如下:

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

int main(void){
    map<int, string> map1;
    //因為map是key-value結構,所以可以做成pair(對組)
    //初始化map:
    //方法1、
    map1.insert(pair<int, string>(1, "teacher01"));
    map1.insert(pair<int, string>(2, "teacher02"));
    //方法2、
    map1.insert(make_pair(3, "teacher03"));
    map1.insert(make_pair(4, "teacher04"));
    //方法3、
    map1.insert(map<int, string>::value_type(5, "teacher05"));
    map1.insert(map<int, string>::value_type(6, "teacher06"));
    //方法4、
    map1[7] = "teacher07";
    map1[8] = "teacher08";


    //容器的遍歷
    map<int, string>::iterator it; 
    for(it = map1.begin(); it != map1.end(); it++){
        cout<<it->first<<" "<<it->second<<endl;   //map的遍歷,跟pair(對組)一樣,first表示第一個(鍵key),second表示第二個(值value);
    }
    cout<<"遍歷結束"<<endl;

    //map的查找,返回值都是迭代器
    map<int, string>::iterator it2 = map1.find(2);
    if(it2 == map1.end()){
        cout<<"key 100的值不存在"<<endl;
    }else{
        cout<<it2->first<<"\t"<<it2->second<<endl;
    }
    //equal_range,異常處理
    pair<map<int, string>::iterator, map<int, string>::iterator> mypair = map1.equal_range(5);  //此時返回2個迭代器,形成一個pair(對組)    
    //第一個迭代器,是>=5的位置
    //第二個迭代器是 >5的位置
    //使用第一個迭代器
    if(mypair.first == map1.end()){
        cout<<"第一個迭代器,是>=5的位置不存在"<<endl;
    }else{
        cout<<mypair.first->first<<"\t"<<mypair.first->second<<endl;
    }
    //使用第二個迭代器
    if(mypair.second == map1.end()){
        cout<<"第二個迭代器,是>5的位置不存在"<<endl;
    }else{
        cout<<mypair.second->first<<"\t"<<mypair.second->second<<endl;
    }

    return 0;
}


4、multimap的基本操作

代碼如下:

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

//multimap的重要應用場景:數據分組;
class Person{
    public:
        string name;
        int    age;
        string tel;
        double saly;
};

int main(void){
    Person p1, p2, p3, p4, p5; 
    p1.name = "王1";
    p1.age = 31; 
    p2.name = "王2";
    p2.age = 32; 
    p3.name = "張3";
    p3.age = 33; 
    p4.name = "張4";
    p4.age = 34; 
    p5.name = "趙5";
    p5.age = 35; 
    multimap<string, Person> map1;
    //sale部門
    map1.insert(make_pair("sale", p1));
    map1.insert(make_pair("sale", p2));
    //development
    map1.insert(make_pair("development", p3));
    map1.insert(make_pair("development", p4));
    //financial
    map1.insert(make_pair("Financial", p5));

    multimap<string, Person>::iterator it;
    for(it = map1.begin(); it != map1.end(); it++){
        //將age=32的人,名字更改為name32;
        if(it->second.age == 32){
            it->second.name = "name32";
        }
        cout<<it->first<<"\t"<<it->second.name<<endl;
    }
    cout<<"遍歷結束"<<endl;

    //顯示開發部的人員信息
    int num = map1.count("development");

    cout<<"development部門人數:"<<num<<endl;
    cout<<"development部門員工信息"<<endl;

    multimap<string, Person>::iterator it1 = map1.find("development");   
    int tag = 0;
    while(it1 != map1.end() && tag < num){
        cout<<it1->first<<"\t"<<it1->second.name<<endl;
        it1++;
        tag++;
    }

    return 0;
}



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洞头县| 灵台县| 南江县| 区。| 黔江区| 万宁市| 宁陵县| 黄山市| 甘孜| 汉源县| 高碑店市| 汉寿县| 康乐县| 朝阳区| 云霄县| 志丹县| 正宁县| 谢通门县| 怀仁县| 信丰县| 肥城市| 福安市| 合肥市| 新巴尔虎左旗| 阜阳市| 泗洪县| 汾西县| 新营市| 桑日县| 宁国市| 静海县| 安乡县| 天峻县| 彭泽县| 元谋县| 将乐县| 永川市| 寻甸| 绥化市| 日喀则市| 金秀|