專案中需要將結構體作為hash的key,一開始用hash_map,但是結構體中多值比較一直失敗,所以嘗試了map。
hash_map 查詢速度會比map快,而且查詢速度基本和資料量大小無關,屬於常數級別;而map的查詢速度是log(n)級別。hash還有hash函式的耗時。當有100w條記錄的時候,map也只需要20次的比較,200w也只需要21次的比較!所以並不一定常數就比log(n) 小。
hash_map對空間的要求要比map高很多,所以是以空間換時間的方法,而且,hash_map如果hash函式和hash因子選擇不好的話,也許不會達到你要的效果,
typedef
struct ip_tuple
iptuple;
#include
#include
#include
#include
using
namespace std;
typedef
struct ip_tuple
else
if(src_port == other.src_port)
//src_port相同,按dst_port公升序排序
else
if(dst_port == other.dst_port)
//dst_port,src_port相同,比較src_ip}}
return
false;}
} iptuple;
intmain()
//**********
iptuple ite;
ite.src_port =2;
ite.dst_port =20;
ite.src_ip=
"bbb"
; mapint>
::iterator itor;
itor = m_roadmap.
find
(ite);if
(itor != m_roadmap.
end())
}
c map 結構體作為key關鍵詞
結構體的定義 這裡的結構體是三個值 int x int y int label 當三個值作為 值時,你需要重新定義它的對比操作operator,這樣才能對map進行查詢操作 資料結構宣告 並且對key的查詢操作進行定義,這樣才能進行find等操作 struct point friend bool o...
STL map中key為結構體的用法
最近在使用stl中的map容器時,碰到key為結構體的情況,總結如下,以便提醒自己。我的使用情景是,我需要根據不同的比例尺 道路型別這兩個引數獲取到對應的道路寬度,由於我是使用map解決這個問題的,自然而然的就以比例尺 道路型別這兩個引數為key,道路寬度為value,建立的key如下 1typed...
C map中key值存在情況判定
count函式用於統計key值在map 現的次數,map的key不允許重複,因此如果key存在返回1,不存在返回0 if testmap.count key 0 cout no this key endl iterator find const key type key 如果key存在,則find返...