Re: Very big array with combinations
On May 5, 4:11 am, Bengt Kappner <ben...@yahoo.de> wrote:
int main ()
{
std::set<std::string> myset;
myset.insert('abc');
return 0;
}
Would that do?
That's the idea (Except double quotes around "abc").
Questions:
1. I can't find any 'set.shuffle' method to make it appear
random before writing it out. Any idea on this?
In <algorithm> there is a function called random_shuffle().
The only caveat is that it requires a random access iterator,
which std::set doesn't have.
The solution is simple, but kinda inelegant: once you're
done generating the strings, copy them into a std::vector.
Then use random_shuffle() on that. It's a bit of a waste
of memory, but on a one-off project, who cares? And it's
really only a few lines of code.
2. Just for my interest: Isn't the insert method doing
the same as I would do by inserting manually at the
right place and comparing to neighbours? Or is this
insert() using some mechanism that's faster?
set::insert() takes advantage of the fact that std::set
keeps things in sorted order. So it can find a duplicate
with a binary search. Check Wikipedia for a description.
Basically it reduces checking N items to checking log2 N
items. On an array of size N = 2000000 that means it
only checks about 21 items. i.e., it does 1/100000th the
work.
Thank you very much!!
No problem
--Jonathan