2016-08-08 13 views
5

Tôi có một tập tin csv có nội dung giống như sau:Tìm bản sao trong vector sử dụng qt

Source Target LinkId LinkName Throughput 
================================================== 
1  12  1250  link1250   5 
1  12  3250  link3250   14 
1  14  1250  link1250   5 
1  14  3250  link3250   14 
1  18  1250  link1250   5 
1  18  3250  link3250   14 
2  12  2250  link2250   5 
2  12  5250  link5250   14 
2  14  2250  link2250   5 
2  14  5250  link5250   14 
2  18  2250  link2250   5 
2  18  5250  link5250   14 

và vân vân. Mục tiêu là tìm số lượng liên kết là đa hướng từ mỗi nút nguồn, tức là đối với nguồn 1, mục tiêu là 12,14,18 đối với linkID 1250, cho linkID 3250, cho nguồn 1, mục tiêu là 12,14 , 18 và như vậy.

tôi đã được sử dụng Qt và đã đọc csv thành một vector của các cấu trúc như sau:

struct edgeDetails_t{ 
    int source; 
    int target; 
    int linkID; 
    QString linkName; 
    int throughput; 
}; 
QVector<edgeDetails_t> multiCastLinks; 

Để đạt được mục tiêu như đã nêu ở trên, tôi đã cố gắng sử dụng QHash

QHash<int, QList<int>> multiCastSenders;

với nguồn là khóa nhưng tôi không chắc chắn đây có phải là cách phù hợp để thực hiện việc này hay không. Có thể ai đó vui lòng cho tôi biết bất kỳ cách nào khác để thực hiện việc này.

Trả lời

3

Điều này cũng có thể với QMultiMap cho phép nhiều khóa, sau đó bạn có thể sử dụng phương pháp keys() để lấy các khóa và values(key) để nhận các giá trị tương ứng.

Để loại bỏ các giá trị trùng lặp, bạn có thể sử dụng toSet() chỉ trả lại giá trị duy nhất của danh sách tương ứng.

QMultiMap<int, int> test; 
test.insert(1, 12); 
test.insert(1, 12); 
test.insert(1, 12); 
test.insert(1, 14); 
test.insert(1, 18); 
test.insert(1, 18); 

test.insert(2, 12); 
test.insert(2, 12); 
test.insert(2, 12); 
test.insert(2, 14); 
test.insert(2, 18); 
test.insert(2, 18); 
qDebug() << "size:" << test.size(); 
QSet<int>::iterator it; 
QSet<int> keys = test.keys().toSet(); 
qDebug() << "keys:" << keys; 
for(it = keys.begin(); it != keys.end(); ++it) { 
    qDebug() << "key:" << *it << "value:" << test.values(*it).toSet(); 
} 

Output:

size: 12 
keys: QSet(1, 2) 
key: 1 value: QSet(12, 14, 18) 
key: 2 value: QSet(12, 14, 18) 

Bạn có thể tìm ra phần còn lại với struct mát mẻ của bạn.

HTH

2
struct edgeDetails_t{ 
    int linkID; 
    QString linkName; 
    int throughput; 
} 

struct sourceNode_t { 
    int sourceNodeId; // For give source node 
    QMap<int, int> targetNodeIdList; // Map link ID -> Target node ID 
}; 

QMap<int, sourceNode_t> sourceNodeList; // All source nodes. Map node ID -> Node object 
QMap<int, edgeDetails_t> edgeList; // All edges. Map edge ID -> Edge object 

Đối với ID nút nguồn Hãy cho, bạn có thể dễ dàng tìm thấy đối tượng nút, từ đó bạn có thể duyệt qua tất cả các liên kết độc đáo và nhận được id nút mục tiêu.

+0

Tôi không chắc liệu targetNodeIdList có hoạt động hay không .. có các giá trị trùng lặp cho ID liên kết .. cũng cho cùng một nguồn .. – nayana

Các vấn đề liên quan