1.map和set的應用和比較
map和set都是關聯式容器,底層容器都是紅黑樹。
1 #include2 #include34//
模擬pair和 make_pair的底層實現5//
template6//
struct pair7//
15//
};16
//template
17//
pairmake_pair(const k& key, const v& value)
18//
2122
//vectorgettopkf(const vector& fruits)
23//
36//
return topk;
37//
}38 vector gettopkf(const vector&fruits)
39*/
50 counttop[fruits[i]]++;51}
52return
topk;53}
5455
56void
maptest()
5772 dictit ret = dict.find("
left");
73if(ret !=dict.end())
74dict.erase(ret);
75 vectorv;
76 v.push_back("梨"
);77 v.push_back("蘋果"
);78 v.push_back("西瓜"
);79 v.push_back("香蕉"
);80 v.push_back("西瓜"
);81 v.push_back("香蕉"
);82 v.push_back("菠蘿"
);83 v.push_back("西瓜"
);84 v.push_back("士多啤梨"
);85
gettopkf(v);
86 }
set支援高效的關鍵字查詢操作---檢查每乙個給定的關鍵字是否在set中,也支援高效插入刪除。
以平衡二叉檢索樹實現,查詢使用中序遍歷演算法,檢索效率高於vector,deque,list等容器,另外使用中序遍歷可將鍵值按照從小到大遍歷出來,構造set集合的主要目的是為了快速檢索,不可直接去修改鍵值。
1#pragma once
2 #include3 #include
4 #include5
6using
namespace
std;78
void
settest()
931 cout <32set
::reverse_iterator ret1=s1.rbegin();
33while (ret1 != s1.rend())
3738
set::iterator ret = s1.find(10); //
39if (ret != s1.end()) //
set的查詢,如果沒有找到不會報錯
40 cout << "
find it
"<< *ret <41else
42 cout << "
null
"<4344
if (s1.count(14))//
只判斷是否存在14,返回1或0
45 cout << "
find it
"<46else
47 cout << "
null
"<4849 ret = s1.find(30); //
find後刪除
50if (ret !=s1.end())
51s1.erase(ret);
52set
::iterator last, first;
53 first = s1.lower_bound(8); //
返回8大的第乙個數
54 last = s1.upper_bound(20); //
返回20大的第乙個數
55 s1.erase(first, last);//
刪除這個範圍的資料
56 s1.erase(100); //
有就刪除,沒有也不報錯
5758
set::iterator ite1 =s1.begin();
59while (ite1 !=s1.end()) 63}
64void
multisettest()
84 multiset::iterator mit = s2.find(20
);85
/*++mit;
86++mit;
87++mit;
88++mit;
*/89 }
map的節點是一對資料,set的節點是乙個資料。
2.擴充套件
multimap允許資料冗餘,即儲存的資料不唯一。
hashmap是基於雜湊表(雜湊表,hash table)實現的。基本原理是:使用乙個下標範圍比較大的陣列來儲存元素。可以設計乙個函式(雜湊函式,也叫做雜湊函式),使得每個元素的關鍵字都與乙個函式值(即陣列下標,hash值)相對應,於是用這個陣列單元來儲存這個元素;也可以簡單的理解為,按照關鍵字為每乙個元素「分類」,然後將這個元素儲存在相應「類」所對應的地方,稱為桶。
但不能夠保證每個元素的關鍵字與函式值是一一對應的,有可能出現對於不同的元素,得到相同的函式值,這就是雜湊衝突,往往需要專門的雜湊衝突處理函式來解決。
hashma插入和查詢的速度與 雜湊函式和衝突處理函式的 實現有關,是這兩個函式耗時的總和。查詢時間複雜度是o(1);
看具體的應用,不一定常數級別的hash_map一定比log(n)級別的map要好,hash_map的hash函式以及解決位址衝突等都要耗時間,而且眾所周知hash表是以空間換時間的,因而hash_map的記憶體消耗肯定要大,一般情況下,如果記錄非常大,考慮hash_map,查詢效率會高很多,如果要考慮記憶體消耗,則要謹慎使用hash_map。
multiset允許資料冗餘。
map和set的使用及top K問題
1.map和set的應用和比較 map和set都是關聯式容器,底層容器都是紅黑樹。1 include 2 include34 模擬pair和 make pair的底層實現5 template6 struct pair7 15 16 template 17 pairmake pair const k ...
map和set的使用及top K問題
1.map和set的應用和比較 map和set都是關聯式容器,底層容器都是紅黑樹。1 include 2 include34 模擬pair和 make pair的底層實現5 template6 struct pair7 15 16 template 17 pairmake pair const k ...
Map和Set簡單使用
map 和set的底層就是紅黑樹,map是k,v模型,而set是k模型。以上就是map的內部實現的成員函式,構造,插入刪除,等。map作為k,v模型,可以有很多用途,比如實現乙個字典。map實現乙個字典 include using namespace std include include int ...