最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++如何實現BitMap數據結構

 更新時間:2022年07月22日 15:23:09   作者:yanerhao  
這篇文章主要介紹了C++如何實現BitMap數據結構,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

分治,分布式。BitMap(位圖)及其升級版bloom filter是處理海量數據常用的方法,這里先介紹BitMap概念及其c++實現。

一、BitMap位圖

該數據結構描述了一個有限定義域內的稠密集合,其中的每一個元素最多出現一次并且沒有其他任何數據與該元素相關聯。

即使這些條件沒有完全滿足(例如,存在重復元素或額外的數據),也可以用有限定義域內的鍵作為一個表項更復雜的表格索引。

所謂的Bit-map就是用一個bit位來標記某個元素對應的Value, 而Key即是該元素。

由于采用了Bit為單位來存儲數據,因此在存儲空間方面,可以大大節(jié)省。

例如假設我們要對0-7內的5個元素(4,7,2,5,3)排序(這里假設這些元素沒有重復)。

那么我們就可以采用Bit-map的方法來達到排序的目的。

要表示8個數,我們就只需要8個Bit(1Bytes),首先我們開辟1Byte的空間,將這些空間的所有Bit位都置為0,

如下圖:

遍歷第一個元素4,則在第4為標1:

以此來推,遍歷完所有后結構:

我們現在遍歷一遍Bit區(qū)域,將該位是bit 1的位的編號輸出(2,3,4,5,7),這樣就達到了排序的目的。

二、C++實現

我們可以用一個unsigned int類型的數組或者向量來表示位圖,假設我們定義vector<unsigned int> a,則 第i位可表示為a[i/32]的i%32位(其中,32*N+r = i,r為i%32,也就是i/32的余數)。

由于計算機對位的操作比乘除法更有效率,這里計算i/32可以用位移操作:i>>5;計算i%32可以用1&31

若是一個char數組str,則str的第i位為i/8(i>>3)地址塊的第i%8(i&7)位.下面以char為例說明,int類比可知。

#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
class BitMap{
private:
        char *bitmap;
        int gsize;
public:
       BitMap(){
       gsize=(10000>>3)+1;//default 10000
       bitmap= new char[gsize];
       memset(bitmap,0,sizeof(bitmap));
                }
       BitMap(int n){
       gsize=(n>>3)+1;
       bitmap=new char[gsize];
       memset(bitmap,0,sizeof(bitmap));
                  }
       ~BitMap(){delete []bitmap;}
       int get(int x){
       int cur=x>>3;
       int red=x&7;
       if(cur>gsize)return -1;
       return (bitmap[cur]&=1>>red); 
                      }
       bool set(int x){
       int cur=x>>3;//獲取元素位置,除8得到哪個元素,x/2^3得到那一個byte 
       int red=x&(7);//邏輯與,獲取進準位置,x&7==x%8.該Byte里第幾個 
       if(cur>gsize)return 0;
       bitmap[cur]|=1>>red;//賦值,1向右移動red位,|表示該位賦值1
       return 1; 
                       }
};

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • C++ this指針和空指針的具體使用

    C++ this指針和空指針的具體使用

    這篇文章主要介紹了C++ this指針和空指針的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • C語言實現簡單飛機大戰(zhàn)

    C語言實現簡單飛機大戰(zhàn)

    這篇文章主要為大家詳細介紹了C語言實現簡單飛機大戰(zhàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++?opencv圖像處理實現灰度變換示例

    C++?opencv圖像處理實現灰度變換示例

    這篇文章主要為大家介紹了C++?opencv圖像處理灰度變換的實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C++語言 STL容器list總結

    C++語言 STL容器list總結

    這篇文章主要介紹了C++語言 STL容器list總結的相關資料,需要的朋友可以參考下
    2016-10-10
  • c語言 漢諾塔算法代碼

    c語言 漢諾塔算法代碼

    c語言 漢諾塔算法代碼,需要的朋友可以參考一下
    2013-04-04
  • Qt自定義實現一個等待提示Ui控件

    Qt自定義實現一個等待提示Ui控件

    等待樣式控件是我們在做UI時出場率還挺高的控件之一,所以這篇文章主要為大家介紹了Qt如何自定義一個好看的等待提示Ui控件,感興趣的可以了解下
    2024-01-01
  • C++簡明分析講解引用與函數提高及重載

    C++簡明分析講解引用與函數提高及重載

    今天繼續(xù)開始對C++核心編程知識的分享與系統(tǒng)講解,第一,這里會提到“引用”方法傳參以及剖析引用的本質;第二,我們對函數來一個提高,相當于進階函數了,包括函數的默認值,簡單的提一下函數的占位參數,函數重載以及注意事項,接下來上正文
    2022-05-05
  • C++中結構體的類型定義和初始化以及變量引用

    C++中結構體的類型定義和初始化以及變量引用

    這篇文章主要介紹了C++中結構體的類型定義和初始化以及變量引用,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • 關于C語言文件操作方法

    關于C語言文件操作方法

    這篇文章主要介紹了關于C語言文件操作方法的相關資料,需要的朋友可以參考下
    2018-03-03
  • C++多繼承同名隱藏實例詳細介紹

    C++多繼承同名隱藏實例詳細介紹

    多繼承可以看作是單繼承的擴展。所謂多繼承是指派生類具有多個基類,派生類..本文將對C++多繼承同名隱藏實例進行分析
    2012-11-11

最新評論

宿州市| 拜泉县| 遵义县| 平果县| 张家港市| 荃湾区| 溧阳市| 枝江市| 玛曲县| 莆田市| 保德县| 商洛市| 平果县| 上栗县| 满洲里市| 岫岩| 三江| 瓦房店市| 张家口市| 土默特右旗| 灵丘县| 禄劝| 山西省| 舒兰市| 仁化县| 竹溪县| 内黄县| 凤阳县| 长宁县| 滦南县| 崇州市| 达尔| 金乡县| 鄂伦春自治旗| 武安市| 克东县| 大埔县| 杭锦后旗| 从化市| 定日县| 含山县|