給定兩個集合set1和set2,我需要通過它們的聯合計算交集的比率。到目前爲止,我有以下代碼:在C++中有效設置聯合和交集
double ratio(const set<string>& set1, const set<string>& set2)
{
if(set1.size() == 0 || set2.size() == 0)
return 0;
set<string>::const_iterator iter;
set<string>::const_iterator iter2;
set<string> unionset;
// compute intersection and union
int len = 0;
for (iter = set1.begin(); iter != set1.end(); iter++)
{
unionset.insert(*iter);
if(set2.count(*iter))
len++;
}
for (iter = set2.begin(); iter != set2.end(); iter++)
unionset.insert(*iter);
return (double)len/(double)unionset.size();
}
這似乎是很慢(我用不同的組調用3M左右時間功能,總是)。蟒蛇對應,在另一方面,是方式要快得多
def ratio(set1, set2):
if not set1 or not set2:
return 0
return len(set1.intersection(set2))/len(set1.union(set2))
有關如何改善(可能不使用Boost)的C++版本的任何想法?
有'的std :: set_union'和'的std :: set_intersection'。你有嘗試過嗎? –
也許你應該看看python集是如何在C++中實現的?根據它需要排序範圍的文檔https://hg.python.org/cpython/file/tip/Modules –
。它看起來應該更多 – user60143