문제

나는 현재에 일하고 DNA 의 데이터베이스 클래스고 저는 현재 연결 각각의 행에는 데이터베이스 모두와 일치하는 점수(에 따라 편집 거리)과 실제 DNA 자체가,그것은 안전 수정하는 첫 번째 이 방법 안에서 반복니까?

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 기능 중 하나가 될 것입의 대부분은 처리 시간을 단축할 수 있습니다.

다른 팁

std :: 쌍의 변수가 const로 정의되므로 수정할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top