2011-03-11 109 views

回答

2

您可以从std::set<>开始,这是一个平衡的二叉树。最近的编译器还提供unordered_set<>,这是一个散列表,但不是C++ 03的一部分:它将成为C++ 0x的一部分。 boost库也有一个哈希集实现。

对于标准::设置<>见http://www.cplusplus.com/reference/stl/set/

例如

std::set<int> s; 
for (int i = 0; i < first_vector.size(); ++i) 
    s.insert(first_vector[i]); 
for (int i = 0; i < second_vector.size(); ++i) 
    if (s.find(second_vector[i]) != s.end()) 
     do_something(); 
+0

交集是集合上的操作,而不是字典。 – 2011-03-11 04:09:34

+0

@Ben:是的 - 意识到当我去提供一个示例实现... :-) – 2011-03-11 04:11:26

+0

谢谢,我会研究它。 – Ava 2011-03-11 17:47:16

0

使用std::map,你可以做类似的事情HashMap在Java

+0

'std :: map'不是散列表。此外,十字路口是集合上的操作,而不是字典。 – 2011-03-11 04:08:31

+0

@Ben我同意std :: map不是散列表。但交叉点仍然可以在字典上执行,因为字典中的关键字是唯一标识的。纠正我,如果它是错误的。 – Richard 2011-03-11 04:33:59

+0

是的,你可以在一组字典键上做一个十字路口,只是忽略这些值......但为什么要额外支付你不打算使用的值呢? – 2011-03-11 04:54:22

1

你可能想的unordered_set类。它是TR1的一部分,并在C++ 0x中标准化,较早的编译器可以在boost库中找到实现。

+0

谢谢,我会读一读。 – Ava 2011-03-11 17:47:00