Как работает hash_set в C++?

Я не знаю как пользоваться hash_set в C++. Я невероятно новичок в этом языке, поэтому я не понимаю, как делать много вещей. Как мне использовать SGI hash_set расширение, так что компилятор, наконец, компилируется без ошибок? Вот мой заголовочный файл:

#ifndef _GAME1_H
#define _GAME1_H

#include "card.h"
#include "deck.h"
#include <ext/hash_set>

const unsigned int TRIALS = 10;

class Game1 {

private:
    // Card::Value is defined in card.h as a public enum:
    // enum Value { NullCard, Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King };
    std::hash_set<Card::Value> *map; // does this really need to be a pointer?

public:
    Game1();
    bool isPair();
    bool isFlush();
    void returnToDeck();
};

#endif

Когда я пытаюсь скомпилировать, я получаю:

In file included from game1.cpp:9:
game1.h:13: error: using-declaration for non-member at class scope
game1.h:13: error: expected `;' before '<' token
make: *** [game1.o] Error 1
  1. Я не знаю, что означает "использование-объявление для не-члена в области видимости".
  2. Почему компилятор жалуется, что "ожидается"; " до '<' token ", когда я в основном следую тому же примеру, что и SGI на их сайте?
  3. Я использую GCC 3.4.6, поэтому я не могу использовать unordered_set
  4. Я посмотрел на простой пример C++ hash_set, но я не понимаю, почему они используют hash<int> H; это актуально?

Я нахожусь в тупике, так как буквально не могу понять это после нескольких часов консультаций с Google.

1 ответ

Я считаю, что вы должны объявить map как

// answering your other question, most likely it doesn't have to be a pointer.
__gnu_cxx::hash_set<Card::Value> map;

(По данным источника hash_set)

Также, map не является хорошим именем для переменной, так как это имя стандартного класса. Хотя это не должно быть причиной для ошибок компиляции здесь.

Другие вопросы по тегам