آمنة لتعديل الأمراض المنقولة جنسيا :: الزوج :: لأول مرة في ناقلات للأزواج؟

StackOverflow https://stackoverflow.com/questions/330186

  •  11-07-2019
  •  | 
  •  

سؤال

وأنا أعمل حاليا على فئة قاعدة بيانات الحمض النووي وأنا حاليا ربط كل صف في قاعدة البيانات مع كل درجة مباراة (على أساس تحرير عن بعد) وسلسلة الحمض النووي الفعلي نفسه، هل هو آمن للتعديل الأول بهذه الطريقة داخل التكرار حلقة؟

typedef std::pair<int, DnaDatabaseRow> DnaPairT;
typedef std::vector<DnaPairT>          DnaDatabaseT;

// ....

for(DnaDatabaseT::iterator it = database.begin();
    it != database.end(); it++)
{
    int score = it->second.query(query);
    it->first = score;
}

والسبب وأنا أفعل هذا هو حتى أستطيع أن فرزها حسب درجة في وقت لاحق. لقد حاولت خرائط وحصل على خطأ الترجمة حول تعديل لأول مرة، ولكن هناك ربما وسيلة أفضل من هذا لتخزين كافة المعلومات للفرز في وقت لاحق؟

هل كانت مفيدة؟

المحلول

لإجابة على سؤالك الأول، نعم. أنها آمنة تماما لتعديل أعضاء الزوج الخاص بك، لأن البيانات الفعلية في الزوج لا يؤثر على ناقلات نفسها.

تعديل: لدي شعور بأن كنت الحصول على خطأ عند استخدام خريطة لأنك حاولت تعديل قيمة first من زوج الداخلي للخريطة. لن يسمح أن لهذه القيمة هي جزء من الأعمال الداخلية للخريطة.

وكما ذكر dribeas :

<اقتباس فقرة> في الخرائط لا يمكنك تغيير أولا لأنه كسر ثابتة من الخريطة كونها شجرة متوازنة فرز

تعديل: للإجابة على سؤالك الثاني، لا أرى أي شيء على الإطلاق الخطأ مع الطريقة التي تتم هيكلة البيانات، ولكن كنت أود أن يكون في عقد قاعدة بيانات <ط> مؤشرات لDnaPairT الأشياء، بدلا من الكائنات نفسها. وهذا من شأنه الحد بشكل كبير من مقدار الذاكرة التي يحصل على نسخ حول أثناء إجراء الفرز.

#include <vector>
#include <utility>
#include <algorithm> 

typedef std::pair<int, DnaDatabaseRow> DnaPairT;
typedef std::vector<DnaPairT *>       DnaDatabaseT;

// ...

// your scoring code, modified to use pointers
void calculateScoresForQuery(DnaDatabaseT& database, queryT& query)
{
    for(DnaDatabaseT::iterator it = database.begin(); it != database.end(); it++)
    {
        int score = (*it)->second.query(query);
        (*it)->first = score;
    }
}

// custom sorting function to handle DnaPairT pointers
bool sortByScore(DnaPairT * A, DnaPairT * B) { return (A->first < B->first); }

// function to sort the database
void sortDatabaseByScore(DnaDatabaseT& database)
{
    sort(database.begin(), database.end(), sortByScore);
}

// main
int main()
{
    DnaDatabaseT database;

    // code to load the database with DnaPairT pointers ...

    calculateScoresForQuery(database, query);
    sortDatabaseByScore(database);

    // code that uses the sorted database ...
}

والسبب الوحيد الذي قد تحتاج إلى النظر في أساليب أكثر كفاءة وإذا كانت قاعدة البيانات الهائلة بحيث تكون الحلقة الفرز تأخذ وقتا طويلا لإكمال. إذا كان هذا هو الحال، على الرغم من أتصور أن وظيفة query الخاص سيكون واحد تأخذ الحيز الأكبر من وقت المعالجة.

نصائح أخرى

ولا يمكنك تعديل منذ المتغير الأول من الأمراض المنقولة جنسيا :: الزوج CONST المحددة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top