C++ متعددة الأبعاد معالجة البيانات
-
03-07-2019 - |
سؤال
مرات كثيرة أجد نفسي الحاجة إلى تحديد وعاء على بيانات متعددة الأبعاد.
دعونا نأخذ مثالا على ذلك:لدي العديد من رقائق البطاطس كل شريحة العديد من سجلات كل سجل له العديد من الخلايا, و كل خلية لديها العديد من الترانزستورات.
في مرحلة من C++ برنامج يجب أن قراءة هذه البيانات في وقت لاحق يجب أن استخدامه.
لا يمكنني استخدام أي خارجي لتخزين هذه البيانات:ملف قاعدة البيانات ، إلخ.
لذا يجب إنشاء بعض متعدد الأبعاد الخاصة بلبنان الحاوية ؟ خريطة من خرائط ناقلات, أو شيء من هذا القبيل...?
أو علي إنشاء فصول (البنيات) لكل منهم ؟ خلايا الطبقة التي تحتوي على ناقل الترانزستورات, ثم سجل الطبقة التي تحتوي على ناقل من الخلايا ، وما إلى ذلك ؟ ولكن ماذا لو كان في وقت لاحق أريد أن الوصول إلى البيانات من قبل الترانزستور ، وليس عن طريق الشريحة ؟
أي طريقة أخرى ؟
شكرا لك
تحرير:نسيت أن أذكر:أنا لا يمكن استخدام دفعة.
المحلول
تنفيذ فصول كاملة لهم.التعليمات البرمجية الخاصة بك وسوف تكون أكثر نظافة في نهاية المطاف.
كلما كنت تجاهل هذه البديهية ، فإنه يعود إلى تطارد لي.لقد نفذت الهرمي 3 مستويات سلسلة مجموعة في الشروط من الأمراض المنقولة جنسيا::أزواج من الأمراض المنقولة جنسيا::سلاسل الأمراض المنقولة جنسيا:أزواج.كانت سريعة و بسيطة, و عندما اضطررت إلى استبدال طبقة واحدة ثم أخرى مع الطبقة تحتوي على سمات إضافية ، كان من المدهش أن من السهل القيام به.لكن في النهاية كان رمز حالة من الفوضى و أنا لم أكن سعيدة توثيقه.تعلمت الدرس مرة أخرى ومرة أخرى ومرة أخرى...
نصائح أخرى
وتحتاج إلى تعيين نطاقك.
<اقتباس فقرة>وهكذا، يجب أن تخلق بعض الحاويات STL متعددة الأبعاد؟ خريطة من خرائط ناقلات، أو شيء من هذا القبيل ...؟
اقتباس فقرة>وسيحتوي كل ناقلات / خريطة كائنات من نوع ما. هذا يقودنا إلى السؤال التالي الخاص بك:)
<اقتباس فقرة>وأو ينبغي أن إنشاء فصول (البنيات) لكل منهم؟
اقتباس فقرة>ويبدو أن هذا هو ما تحتاج على أقل تقدير.
<اقتباس فقرة>والطبقة الخلية التي تحتوي على ناقل من الترانزستورات، ثم فئة التسجيل التي تحتوي على ناقل الخلايا، وما إلى ذلك؟
اقتباس فقرة> ونظرة على حد سواء has-a
وis-implemented-in-terms-of
التصاميم.
ولكن ماذا لو كان في وقت لاحق أريد أن فرز البيانات الخاصة بي التي كتبها الترانزستور، وليس عن طريق رقاقة؟
اقتباس فقرة> ما هي البيانات؟ يمكنك تمرير دائما حول المقارنة تبعا للسياق. أيضا، واسأل نفسك إذا كنت حقا بحاجة الى فضح تفاصيل مستوى Transistor
لشخص يعمل مع Chip
. التي سوف تساعد على بدء.
إذا كنت ترغب في الوصول إلى البيانات الخاصة بك على طول مختلفة "الأبعاد"، قد تكون مهتمة في <لأ href = "http://www.boost.org/doc/libs/1_38_0/libs/multi_index/doc/index. أتش تي أم أل "يختلط =" نوفولو noreferrer "> boost::multi_index_container
. أنا لم تستخدم ذلك بنفسي، ولكن يبدو أنه يناسب مشروع القانون.
وكما نصح، اخترت لتنفيذ فصول كاملة:
class Chip
{
map<RegisterLocation, Register> RegistersPerLocation;
public:
void AddRegisterPerLocation(RegisterLocation, Register);
};
class Register
{
map<CellLocation, Cell> CellsPerLocation;
public:
void AddCellPerLocation(CellLocation, Cell);
};
// etc..