Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 562495
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T12:33:39+00:00 2026-05-13T12:33:39+00:00

I have data that is a set of ordered ints [0] = 12345 [1]

  • 0

I have data that is a set of ordered ints

[0] = 12345
[1] = 12346
[2] = 12454
etc.

I need to check whether a value is in the collection in C++, what container will have the lowest complexity upon retrieval? In this case, the data does not grow after initiailization. In C# I would use a dictionary, in c++, I could either use a hash_map or set. If the data were unordered, I would use boost’s unordered collections. However, do I have better options since the data is ordered? Thanks

EDIT: The size of the collection is a couple of hundred items

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T12:33:39+00:00Added an answer on May 13, 2026 at 12:33 pm

    Just to detail a bit over what have already been said.

    Sorted Containers

    The immutability is extremely important here: std::map and std::set are usually implemented in terms of binary trees (red-black trees for my few versions of the STL) because of the requirements on insertion, retrieval and deletion operation (and notably because of the invalidation of iterators requirements).

    However, because of immutability, as you suspected there are other candidates, not the least of them being array-like containers. They have here a few advantages:

    • minimal overhead (in term of memory)
    • contiguity of memory, and thus cache locality

    Several “Random Access Containers” are available here:

    • Boost.Array
    • std::vector
    • std::deque

    So the only thing you actually need to do can be broken done in 2 steps:

    • push all your values in the container of your choice, then (after all have been inserted) use std::sort on it.
    • search for the value using std::binary_search, which has O(log(n)) complexity

    Because of cache locality, the search will in fact be faster even though the asymptotic behavior is similar.

    If you don’t want to reinvent the wheel, you can also check Alexandrescu’s [AssocVector][1]. Alexandrescu basically ported the std::set and std::map interfaces over a std::vector:

    • because it’s faster for small datasets
    • because it can be faster for frozen datasets

    Unsorted Containers

    Actually, if you really don’t care about order and your collection is kind of big, then a unordered_set will be faster, especially because integers are so trivial to hash size_t hash_method(int i) { return i; }.

    This could work very well… unless you’re faced with a collection that somehow causes a lot of collisions, because then unsorted containers will search over the “collisions” list of a given hash in linear time.

    Conclusion

    Just try the sorted std::vector approach and the boost::unordered_set approach with a “real” dataset (and all optimizations on) and pick whichever gives you the best result.

    Unfortunately we can’t really help more there, because it heavily depends on the size of the dataset and the repartition of its elements

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a set of 'dynamic data' that I need to bind to the
I have a data set that resembles this: id product_id size color price created_date
I have a data set that is around 700 rows with eight columns of
I have a data set that that I would like to call in a
I have the following data set that I am trying to plot with ggplot2,
I have a large data set that I'm working with in excel. About 1000+
I have a data type that contains a set and a method that expects
I have a very large possible data set that I am trying to visualize
I have a set of data that contains garbled text fields because of encoding
I have a set of data that is structured like this: ItemA.GroupA ItemB.GroupA ItemC.GroupB

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.