簡體   English   中英

將一組整數變量映射到值的C ++有效方法

[英]C++ efficient way to map a group of integer variables to values

為了將一組整數變量映射到值( 例如,我有a1, a2, a3, a4, a5, a6來確定值v這是一個映射,例如map<tuple<int, int, int, int, int, int>,VALUE_TYPE>map<struct{int, int, int, int, int, int},VALUE_TYPE> ),我們可以使用

  1. 由整數作為鍵構造的字符串
  2. 元組作為鍵
  3. 結構或類為鍵
  4. 等等 ...

我對這些方法的性能感到很好奇。 就我而言

  1. 更少的插入,更多的查詢
  2. 范圍廣,但整數鍵分布稀疏
  3. 時間更多地關注我,記憶更少
  4. 地圖訪問是最消耗時間的部分,因此即使10%的加速也很重要

問題是在我的情況下哪種方法效果更好?
如果選擇了struct或class鍵,是否有任何技巧可以使比較器更有效?
unordered_map是否更適合這種情況? 我應該如何計算鍵的哈希值?

對於解決方案的任何建議或評論,我將不勝感激。 也歡迎就更一般的情況進行討論。 提前致謝。

基本上:實施不同的解決方案,編寫性能測試程序並進行測量!

當然:

  • 將整數用作整數將比將它們轉換為字符串更快。
  • 結構(或類)應該比元組(我的經驗)更快。
  • 也可以嘗試使用std::array<>容器(也已經提供了用於比較的運算符)。
  • 哈希映射( std::unordered_map<> )比排序映射( std::map<> )更快,但是當然僅在不需要使用部分鍵進行搜索時才可以使用。

另外,如果您的數字相對較小並且密鑰中包含很多數字,則考慮實現trie數據結構。 就像std::unordered_map這將允許您在O(l)時間訪問元素,其中l是鍵的長度,但也將允許您以升序迭代地拋出所有值,並通過部分密鑰。 這里的問題是您的內存消耗將與字母大小成比例(當然,您可以將內部邊緣存儲在某些復雜的數據結構中,但這會對性能產生負面影響)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM