我有一个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作为关键但我不确定这是否是正确的方法.有人可以让我知道这样做的任何其他方式.
这对于允许多个键的 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)
你可以用你很酷的结构来解决剩下的问题。
华泰
| 归档时间: |
|
| 查看次数: |
819 次 |
| 最近记录: |