2013-12-22 2 views
-1

내 링크에 맞춤 데이터가 필요합니다. stLINK는 링크 데이터를 나타내는 구조체라고 생각하십시오. 한 가지 방법은 구조체의 포인터를 행렬에 넣어 (int로 캐스팅이 필요함), 또 다른 방법은 링크 벡터를 만들고 행렬에 각 링크 항목의 인덱스를 넣는 것입니다. 표준 방법이 있으면 저를 도우십시오. 덕분에그래프 구현, 인접성 매트릭스 사용, 링크의 맞춤 데이터 포함

답변

0

나는 그것이 당신이 각 가장자리에 대한 사용자 정의 데이터를 가지고 필요가 이해, 그렇지? 나는 이것을하기 위해 벡터와지도를 사용한다.

struct data_t { 
// any data you want to store for an edge 
int a,b,c; 
string name; 
}; 

std::vector< std::map<int, data_t> > adj; 

이렇게하면 가장자리가 있는지 여부를 확인하는 것이 빠릅니다. 그렇지 않으면 그냥 사용할 수 있습니다 std::vector<data_t>

0

"사용자 정의 데이터"와 "링크"에 대한 설명이 없습니다. 나는 그들이 수업이라고 생각할 것이다. 뭔가 (여기서는 "링크")에 여러 유형의 데이터를 한 번에 전달해야하는 경우 클래스를 만들어야합니다. 물론, C++로 객체의 행렬을 만들 수 있습니다. int으로 변환 할 필요가 없습니다. 당신의 "사용자 정의 데이터"는 "링크"수행하고 각 링크가 자신의 "사용자 정의 데이터"가로 전체 시간을 살 수 있다면

  1. 는 가장 쉬운 방법은 클래스 링크에 데이터를 추가하는 것입니다.

    class Link 
    { 
        customData_t data; 
        // other useful attributes (and methods) 
    }; 
    
  2. 당신은 당신의 "사용자 정의 데이터"의 std::vector을 만들 수 있습니다. 항목의 생성 및 삭제를 관리합니다. 무작위 요소에 접근하는 가장 빠른 방법은 포인터 인 메모리에서의 위치를 ​​알아내는 것입니다. 나는 int 형으로 캐스트 할 필요가 없다.

    std::vector<customData_t> CustomData; 
    
    class Link 
    {  
        customData_t* data; 
        // other useful attributes (and methods) 
    }; 
    

    data 필링 :

    Link l; 
    customData_t temp; 
    CustomData.push_back(temp); 
    l.data = &(CustomData.back()); 
    

    (또는 C++ 11 vector::emplace_back()를 사용할 수 있습니다.)

    액세스가 용이하다 : 당신이 원하는 경우 *l.data

    를이 방법은 더 나은 여러 개의 "링크"에 걸쳐 동일한 데이터를 공유하거나 "링크"의 수명 동안 추가/제거해야하는 경우.

관련 문제