But the question is, does it solve your problem?  Your original message said
that you were doing something _like_ binning, but that it wasn't.  This
actually _is_ binning.  Is it good enough, or do you need something else?

Thanks,
Cem Karan 


On 4/16/08 12:25 PM, "John Stiles" <[EMAIL PROTECTED]> wrote:

> I never thought of using a hash function to do binning. Interesting
> approach.
> 
> 
> Army Research Lab wrote:
>> Have you looked at hash_multimap
>> (http://www.sgi.com/tech/stl/hash_multimap.html)?  Note that the following
>> code was beaten out in entourage, without compiling, testing, etc.
>> 
>> struct eqdouble
>> {
>>   bool operator()(const double d1, const double d2) const
>>   {
>>     double diff = d1 - d2;
>>     if (diff < 0.0)
>>         diff = -diff;
>>     return diff < 0.00001; // Or whatever other epsilon you want.
>>   }
>> };
>> 
>> struct hashfunc
>> {
>>     // This operator hashes numbers into bins of differing ranges.
>>     // If all your bins are the same size, use divide.
>>     size_t operator()(const double &d) const
>>     {
>>         if (d < 1.0)
>>             return 1.0;
>>         if (d < 3.0)
>>             return 2.0;
>>         if (d < 35.0987)
>>             return 3.0;
>>         return 4.0;
>>     }
>> };
>> 
>> typedef hash_multimap<double, double, hashfunc, eqdouble> map_type;
>> 
>> void lookup(const map_type& Map, const double d)
>> {
>>   cout << d << ": ";
>>   pair<map_type::const_iterator, map_type::const_iterator> p =
>>     Map.equal_range(d);
>>   for (map_type::const_iterator i = p.first; i != p.second; ++i)
>>     cout << (*i).second << " ";
>>   cout << endl;
>> }
>> 
>> int main()
>> {
>>   map_type M;
>>   M.insert(map_type::value_type(1.0, 1.0));
>>   M.insert(map_type::value_type(2.0, 2.0));
>>   M.insert(map_type::value_type(2.0, 12.0));
>>   M.insert(map_type::value_type(2.0, 13.0));
>>   M.insert(map_type::value_type(3.0, 16.0));
>>   M.insert(map_type::value_type(35.0, 17.0));
>>   M.insert(map_type::value_type(-56.9, 18.0));
>>   M.insert(map_type::value_type(42.0, 127.0));
>> 
>>   lookup(M, 1.0);
>>   lookup(M, 2.0);
>>   lookup(M, 35.0);
>> }

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to