2016-08-08 11 views
5

mit habe ich eine CSV-Datei, deren Inhalt wie folgt aussehen:Duplikate suchen in Vektor 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 

und so weiter. Ziel ist es, die Anzahl der Links zu finden, die von jedem Quellknoten Multicast sind, dh für Quelle 1 sind die Ziele 12,14,18 für LinkID 1250, für LinkID 3250, für Quelle 1 sind die Ziele 12,14 , 18 und so weiter.

Ich habe mit Qt und haben die csv in einen Vektor von Strukturen wie folgt lauten:

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

Um das Ziel zu erreichen, wie oben erwähnt, habe ich versucht, QHash

QHash<int, QList<int>> multiCastSenders; zu verwenden

mit Quelle als Schlüssel, aber ich bin mir nicht sicher, ob dies der richtige Weg ist, dies zu tun. Könnte mir jemand bitte eine andere Möglichkeit geben, dies zu tun.

Antwort

3

Dies ist auch möglich mit QMultiMap, das mehrere Schlüssel erlaubt, dann können Sie die Methode keys() verwenden, um die Schlüssel zu erhalten und values(key), um entsprechende Werte zu erhalten.

Um doppelte Werte loszuwerden, können Sie toSet() verwenden, die nur eindeutige Werte der jeweiligen Liste zurückgibt.

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(); 
} 

Ausgang:

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

Sie können den Rest mit Ihrem kühlen Struktur herauszufinden.

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 

Für give Quellknoten-ID, können Sie leicht Knotenobjekt finden, von dort können Sie alle eindeutigen Links iterieren und Zielknoten-IDs erhalten.

+0

Ich bin nicht sicher, ob targetNodeIdList funktionieren würde .. gibt es ID doppelte Werte für Link ..also für gleiche Quelle .. – nayana