1. 程式人生 > >C++map和set的簡單理解和使用案例

C++map和set的簡單理解和使用案例

Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料 處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。map內部自建一顆紅黑樹(一 種非嚴格意義上的平衡二叉樹),這顆樹具有對資料自動排序的功能,所以在map內部所有的資料都是有序的,後邊我們會見識到有序的好處。來自:點選開啟連結

set集合容器:實現了紅黑樹的平衡二叉檢索樹的資料結構,插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點的鍵值;另外,還得保證根節點左子樹的高度與右子樹高度相等。
平衡二叉檢索樹使用中序遍歷演算法,檢索效率高於vector、deque和list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來。
構造set集合主要目的是為了快速檢索,不可直接去修改鍵值。

關於map的文件:點選開啟連結

關於set的文件:點選開啟連結

輸出順序按內部樹的結構輸出方式。

/*
 * 計算輸入的不同單詞的個數
 * 運用map和set關聯容器
 * map的特點是其下標不必為整數(通過鍵來查值)
 * 如我們想知道對應的學生列表  姓名-學號 
 * 那我們可以用map<string,long> 利用姓名(string)就可以查出對應的值(long)
 * 
 * 下面的例子:輸入5個string並輸出對應字串出現的次數
 */


#include <iostream>
#include <map>
#include <cstddef>
#include <set>

using namespace std;

int main()
{
    map<string , size_t>word_count;//鍵值對,鍵和值的對映關係
    string word;
    int i=0;                //限制輸入為5個string
    while(1){
        if(i++>4) break;
        cin>>word;
        ++word_count[word];//這裡的word是指的輸入的string串,不是一個數字索引,
                            //word對應的字串被當作鍵值對的鍵錄入,並對鍵值對所對應的值(word_count[word])++操作;
    }                       //這樣對應的鍵值對
                            //如果我將word_count[word]中的word改為word_count["word"]這樣我的輸入就都加到了word所對應的鍵值對了
    for(auto &w:word_count)
    cout << w.first <<"\t出現次數 "<< w.second<<endl;//first為儲存關鍵字的資料成員,second為儲存對應值的資料成員
    return 0;
}


下面是記錄輸入除set容器包含的鍵外的單詞出現次數:

int main(){

    map<string, size_t> word_count;
    set<string> exclude={"the","a","an"
                         "The","A","An"};
    string word;
    int i=0;
    while(1){
        if(i++>4) break;

        cin>>word;
        if(exclude.find(word) == exclude.end())//沒有查到find會返回尾迭代器,證明沒找到
            ++word_count[word];
    }
    for(auto &w:word_count)
    cout << w.first <<"\t出現次數 "<< w.second<<endl;
    return 0;
}


相關推薦

C++mapset簡單理解使用案例

Map是STL的一個關聯容器,它提供一對一(其中第一個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值)的資料 處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。map內部自建一顆紅黑樹(一 種非嚴格意義上

Java集合-List,Set (簡單概述案例

  List     有序的collection。此介面的使用者啊可以對列表中每個元素的插入位置進行精確的控制。使用者可以根據元素的整數索引訪問元素,並搜尋列表中的元素。允許重複元素。     介面特點:有序,索引,可以重

List、MapSet理解(LinkedListArrayList、VectorArrayList、HashMapHashTableHashSet區別與使用)

List特點:元素有放入順序,元素可重複 Map特點:元素按鍵值對儲存,無放入順序 Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的HashCode決定的,其位置其實是固定的) List介面有三

C# 泛型的簡單講解應用

出現 ava 問題 this bsp div arc 但是 int 泛型 什麽是泛型   泛型是 2.0 版 C# 語言和公共語言運行庫 (CLR) 中的一個新功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方

List&Map&Set的操作遍歷

log treeset author eset class int 一個 println 組成 List&Map&Set的操作和遍歷 Java的三大集合即:Set、List、Map。 Set:代表無序、不可重復的集合,常用的有HashSet(哈希表實現)、

C# try catch finally簡單介紹應用

val hat CA one ... 出錯 結構 介紹 有關 今天看代碼書的時候,有用到try--catch--finally,然後就查了下具體的註意事項和應用。 簡單來說就是:   try {     //有可能出錯誤的代碼或者代碼片段   }   catch{

關於security的簡單理解應用

pid server 集群 css exc for 關於 統一 rip 2018年7月30日1.搜索引擎框架百度googleLucene 單機操作,就是一堆jar包中的api的使用,自己幹預,如何創建索引庫,刪除索引庫,更新索引庫,高亮,自己調度APISolr 支持we

golang 中 array,slice,map 三個的理解區別

array array是由[n]<byte>定義,其中的n標識array的長度,而<type>標示希望儲存的型別。對array的賦值或索引是由方括號完成的: var arr [10]int arr[0] = 21 arr[1] =

分佈叢集簡單理解

**分散式:**一個事情拆分成多個完成 **叢集:**同一個事情多個人做 **例子:**對於一個任務,它有十個子任務,平均每個子任務完成需要1個小時。總共需要10小時。 **分散式方案:**提供十臺伺服器,每個伺服器針對每個子任務進行,則完成一個任務需要1小時。 **叢集方案:**提供十臺伺

Maven簡單理解介紹

前言 本文主要面向Maven的初學者,介紹了何為Maven以及Maven的簡單用法。更加詳細的用法可以檢視文章底部的連結。 1 Maven簡介 1.1 何為Maven Maven是Apache組織開發的一個開源的跨平臺的專案管理工具,主要服務基於java平臺的專案構建、依賴管理和專案

C++設計模式】簡單工廠工廠方法

#ifndef __FACTORYMETHOD_H__ #define __FACTORYMETHOD_H__ #include <iostream> #include <str

C++多型性的理解舉例

多型性是面向物件程式的一個重要特徵,下面通過程式來理解程式的多型性: //多型性 #include<iostream> using namespace std; class Point { public: Point(float x=0,float y=0

cookiesession的簡單理解區別

cookie和session的簡單理解和區別 來源 cookie和session的定義 二者的機制 區別 本文只是對cookie和session一個簡單的理解與區分,更深入的理解請訪

Android AIDL(介面定義語言)簡單理解基本使用方法

public class MainActivity extends Activity implements OnClickListener { Button btnBind, btnPlay, btnPause; IMyService mBinder; // 介面的一個引用 boolean

spring類的注入new簡單理解

springboot     1、main.run方法進入     2、refreshContext     3、refresh     4、finishBeanFactoryInitialization

CAS演算法實現資料更新的簡單理解ABA問題

注:本文是在http://www.toutiao.com/i6421671637946466817/?wxshare_count=2&pbid=1498719626基礎上整理!CAS:Compare and Swap,即比較再交換。是無鎖操作,也有人說他是樂觀鎖,也許

java基礎(一):我對java的三個環境變數的簡單理解配置

首先說說java的三個環境變數:java_home,classpath,path java_home:jdk的安裝路徑【你一層一層點開安裝路徑,直到當前目錄有一個bin目錄,然後在位址列裡面右鍵單擊複製地址就是jdk的安裝路徑(eg:D:\Java\jdk1.8.0_65)】,沒有其實也可以,在用到jdk的

C++中this指標的理解用法

關於this指標的一個精典回答: 當你進入一個房子後,你可以看見桌子、椅子、地板等,但是房子你是看不到全貌了。對於一個類的例項來說,你可以看到它的成員函式、成員變數,但是例項本身呢?this是一個指標,它時時刻刻指向你這個例項本身。 個人理解: (ps:class類就好比這

演算法之紅黑樹簡單理解定義

#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXSIZE 1000 typedef int ElemType; #define RED 0 #define BLACK

mapset的使用原理

我們學習過順序容器如vecor,list等,它們中的元素是按照在容器中的位置來順序儲存和訪問的。而接下來要學習的關聯容器則有根本的不同,它們中的元素是按關鍵字來儲存和訪問的。 在《C++Primer》中列舉了標準庫中的8個關聯容器,如下: 關聯容器支援高