Can set_intersection be used with hash_set in C++?

后端 未结 3 1375
遇见更好的自我
遇见更好的自我 2021-01-22 03:09

I am calculating intersection, union and differences of sets. I have a typedef of my set type:

typedef set node_set;

When it i

相关标签:
3条回答
  • 2021-01-22 03:28

    I don't think so.

    One of the pre-condition of set_intersection is:

    • [first1, last1) is ordered in ascending order according to operator<. That is, for every pair of iterators i and j in [first1, last1) such that i precedes j, *j < *i is false.

    The hash_set (and unordered_set) is unordered, so the ordered condition cannot be satisfied.

    See tr1::unordered_set union and intersection on how to intersect unordered_sets.

    0 讨论(0)
  • 2021-01-22 03:39

    I'm going to go with no. Keep in mind hash_set isn't standard C++ and never will be, it's an older extension that's no longer supported. The newer "hash maps" are called unordered_set and unordered_map, available in TR1, Boost, and C++0x.

    The reason it's a no is that set_intersection requires the input data to be sorted. Contrarily, the reason a hash map is so quick is it gives up ordering. This is obviously more pronounced under the name unordered_set. So the precondition cannot be reliably met.

    0 讨论(0)
  • 2021-01-22 03:39

    No, you can't use set_intersection because set_intersection requires that the two sets are ordered (using the same ordering). Hash sets aren't ordered in any way. In C++0x they will in fact be called unordered_set.

    0 讨论(0)
提交回复
热议问题