使用qt在向量中查找重复项

smy*_*lov 5 c++ csv qt

我有一个csv文件,其内容如下所示:

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
Run Code Online (Sandbox Code Playgroud)

等等.目标是找到从每个源节点多播的链接数,即对于源1,目标是12,14,18用于linkID 1250,对于linkID 3250,对于源1,目标是12,14, 18等等.

我一直在使用Qt并将csv读入结构体的向量,如下所示:

struct edgeDetails_t{
    int source;
    int target;
    int linkID;
    QString linkName;
    int throughput;
};   
QVector<edgeDetails_t> multiCastLinks;
Run Code Online (Sandbox Code Playgroud)

为了实现上述目标,我试图使用 QHash

QHash<int, QList<int>> multiCastSenders;

以source作为关键但我不确定这是否是正确的方法.有人可以让我知道这样做的任何其他方式.

nay*_*ana 4

这对于允许多个键的 QMultiMap 也是可能的,然后您可以使用方法keys()来获取键并values(key)获取各自的值。

要消除重复值,您可以使用toSet()它仅返回相应列表的唯一值。

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();
}
Run Code Online (Sandbox Code Playgroud)

输出:

size: 12
keys: QSet(1, 2)
key: 1 value: QSet(12, 14, 18)
key: 2 value: QSet(12, 14, 18)
Run Code Online (Sandbox Code Playgroud)

你可以用你很酷的结构来解决剩下的问题。

华泰