将信息保存到哈希表或向量中

时间:2011-11-14 17:57:39

标签: c++ visual-c++

我想知道哪一个更快 哈希表或向量。

如果我想查看内部所有信息的循环并将其与我当前的数据进行比较, 如果它已经在里面,我想打破我的循环。

示例:

我有[{1,2},{1,2,3}]并且在循环中我当前的新数据是{1,2}(它在我的向量或我的哈希表中),所以我会打破我的循环如果我有{2,1}我也会打破它。

如果所有元素都匹配,无论顺序如何,否则我会继续循环。如果哈希表速度快得多,我是否可以提示如何实现它,因为我是C ++的新手

2 个答案:

答案 0 :(得分:0)

Hashtable可以更好地工作,因为您可以创建键值对。唯一的条件是你不应该有多个密钥相同的组合。所以你不能在表中有3,1和3,2因为密钥是唯一的。

如果你在lhs上有重复项,那么最好使用vector。

答案 1 :(得分:0)

我使用的是嵌套集,即std::set<std::set<int> >

#include <set>
#include <cassert>

typedef std::set<int> Entry;
typedef std::set<Entry> Table;

int main () {
  int e1[] = {1,2};
  int e2[] = {1,2,3};
  int e3[] = {2,1};
  int e4[] = {3,2};

  Table t;
  t.insert(Entry(e1, e1+2));
  t.insert(Entry(e2, e2+3));

  Table::iterator it;
  Table::iterator end = t.end();;

  // Search for 1,2
  it = t.find(Entry(e1, e1+2));
  // Should find it
  assert(it != end);

  // Search for 2,1
  it = t.find(Entry(e3, e3+2));
  // Should find it
  assert(it != end);

  // Search for 3,2
  it = t.find(Entry(e4, e4+2));
  // Should NOT find it
  assert(it == end);
}