简体   繁体   中英

Best way to Store and Search Numbers in C++

I have a very large array storing some numbers. My task is to find if a particular number exists in array or not efficiently. Which algorithm and data structure I should go with?

Few assumptions:

  1. Each number in array would be unique.
  2. I am not concerned about where the data is found in array I just want to return true if data is found else false.

I would be using C++ as programming language.

Please suggest.

Thanks

Constant time lookup with unordered_set .

There are also options of bitsets etc. Depends exactly how large is "very large" and the sparseness of the values stored compared to how many of them there actually are.

seems unordered_set is suitable for your requirement.

PS: Pls remember all elements in this set are immutable

The known best way to check if an element (number) is a member of a set (array) is to use bloom filters . It works well if set is changing over time or if there are set operations among sets. Bloom filters are easy to implement and good implementations are availble

If set is static (ie never change) the good way is to use perfect hash function . It will take time to build, but will outperform usual hash function provided by std::unordered_set

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM