أفضل طريقة لخلق hashmap كبير في وقت الترجمة (C ++)؟
-
05-07-2019 - |
سؤال
في طلبي، وأنا بحاجة إلى سلاسل التجزئة خريطة رسم الخرائط لعدد كبير من الكائنات ثابتة. تبقى تعيينات ثابتة لمدة التطبيق. هل هناك طريقة سهلة لمرحلة ما قبل توليد تعيينات في وقت الترجمة بدلا من بنائه عنصر من عنصر عند بدء تشغيل التطبيق؟
المحلول
وابحث عن gperf ، فإنه يقوم بإنشاء رمز لك من شأنها أن تجزئة تماما.
نصائح أخرى
وتحقق من وظيفة تجزئة الكمال Burtlebob ل. في تجربتي أنه أكثر مرونة من gperf. http://burtleburtle.net/bob/hash/perfect.html
هل يمكن كتابة مولد رمز بسيط هو أن تنبعث ملف رأس مع تعيينات، وتشغيل هذا كخطوة ما قبل البناء في عملية الإنشاء.
أنت تبحث عن دفعة. تعيين في map_list_of
. كان يعمل لhashmaps جدا.
#include <boost/assign/list_of.hpp> // for 'map_list_of()'
#include <boost/assert.hpp>
#include <map>
using namespace std;
using namespace boost::assign; // bring 'map_list_of()' into scope
{
map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);
BOOST_ASSERT( next.size() == 5 );
BOOST_ASSERT( next[ 1 ] == 2 );
BOOST_ASSERT( next[ 5 ] == 6 );
// or we can use 'list_of()' by specifying what type
// the list consists of
next = list_of< pair<int,int> >(6,7)(7,8)(8,9);
BOOST_ASSERT( next.size() == 3 );
BOOST_ASSERT( next[ 6 ] == 7 );
BOOST_ASSERT( next[ 8 ] == 9 );
}
لا تنتمي إلى StackOverflow