我有一系列Key值对。每个Key有2个值。键的值可能重合。 最初,我从Key1开始,ValueKey1,ValueKey2存储在一个集合中(可能是数组)。
现在,对于每个连续的Keyi,我检查Valuei和Valuei + 1是否在集合中。如果其中任何一个在集合中,则加入集合。
否则,如果一个集合中存在两个KeyValues,则丢弃该密钥。
如何使用C ++实现这个功能,我很少有想法,所以如果可能的话,代码片段或提示会非常有用。
答案 0 :(得分:0)
您是否正在使用或拥有'C ++中的算法'(Sedgewick,第3版)?
本书遇到的第一个问题是连接问题(第7页),其中有多个使用成对键的union-find(快速联合,快速查找,加权等)算法的实现
这是快速查找版本:(这只是书中的重新输入 - 未经测试)
#include <iostream>
const int N = 10000;
int main() {
int i, p, q, id[N];
for( i = 0; i < N; i++ ) id[i] = i;
while( cin >> p >> q ) {
int t = id[p];
if ( t = id[q] ) continue;
for ( i = 0; i < N; i++ )
if ( id[i] == t) id[i] = id[q];
cout << " " << p << " " << q << endl;
}
}
只是不断吐出未连接的对(你可能会反转以获得你想要的东西)
这本书详细描述了它是如何运作的 - 我猜你现在已经有了它。