c map中key為結構體

2021-10-09 05:00:26 字數 1038 閱讀 7237

專案中需要將結構體作為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返...