сохранение информации в хеш-таблицу или векторы - PullRequest
0 голосов
/ 14 ноября 2011

Я хочу знать, какой из них быстрее хеш-таблица или векторы.

если я хочу увидеть цикл по всей информации внутри и сравнить ее с моими текущими данными, Если он уже внутри, я хочу разорвать мою петлю.

Пример:

У меня есть [{1,2}, {1,2,3}] и внутри цикла мои текущие новые данные {1,2} (они находятся внутри моего вектора или моей хеш-таблицы), поэтому я сломаю мой цикл, и если у меня будет {2,1}, я его тоже разорву.

Если все элементы совпадают независимо от порядка, который я нарушаю, в противном случае я продолжаю свой цикл. И если хеш-таблица намного быстрее, могу ли я подсказать, как я могу ее реализовать, потому что я новичок в C ++

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

Я бы использовал вложенный набор, то есть 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);
}
0 голосов
/ 14 ноября 2011

Hashtable будет работать лучше, так как вы можете создать пару ключ-значение. Единственное условие - у вас не должно быть более одной комбинации, где ключ одинаков. Таким образом, вы не можете иметь 3,1 и 3,2 в таблице, так как ключ уникален.

Если у вас есть дубликаты на lhs, тогда лучше всего использовать vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...