hash_set was not declared even I #include<hash_set>

Discussion in 'C++' started by eric, Jul 12, 2011.

  1. eric

    eric Guest

    Dear advanced c/g++ programers:
    I tried the following code
    -----------------------------------------------------------------------------------------
    // Example 6-8 Storing strings in a hast_set
    #include <iostream>
    #include <string>
    #include <hash_set>
    using namespace std;

    int main() {

    hash_set<std::string> hsString;
    string s = "bravo";

    hsString.insert(s);
    s = "alpha";
    hsString.insert(s);
    s = "charlie";
    hsString.insert(s);

    for (hash_set<string>::const_iterator p = hsString.begin();
    p != hsString.end(); ++p)
    cout << *p << endl; // Note that these aren't guaranteed
    // to be in sorted order
    }
    ---------------------------------------------------------------------------------------------------
    but I got the following compile error(g++ 4.5.2)
    ----------------------------------------------------------------
    eric@eric-laptop:~/cppcookbook/ch6$ g++ -Wno-deprecated Example6-8.cpp
    Example6-8.cpp: In function ‘int main()’:
    Example6-8.cpp:9:3: error: ‘hash_set’ was not declared in this scope
    Example6-8.cpp:9:23: error: expected primary-expression before ‘>’
    token
    Example6-8.cpp:9:25: error: ‘hsString’ was not declared in this scope
    Example6-8.cpp:18:23: error: expected primary-expression before ‘>’
    token
    Example6-8.cpp:18:24: error: ‘::const_iterator’ has not been declared
    Example6-8.cpp:18:41: error: expected ‘;’ before ‘p’
    Example6-8.cpp:19:8: error: ‘p’ was not declared in this scope
    eric@eric-laptop:~/cppcookbook/ch6$
    ---------------------------------------------------------------------
    your can get the code to test by yourself
    source code
    http://examples.oreilly.com/9780596007614/

    Thanks your help a lot in advance, Eric
     
    eric, Jul 12, 2011
    #1
    1. Advertising

  2. On Jul 12, 8:42 am, eric <> wrote:
    >   I tried the following code

    [snip]
    > #include <string>
    > #include <hash_set>
    > using namespace std;

    [snip]
    >   hash_set<std::string> hsString;

    [snip]
    > Thanks your help a lot in advance, Eric


    hash_set is not part of c++. It was specified in STL SGI but was not
    included in the standard. g++ provides it as a backward compatibility
    in the namespace __gnu_cxx.

    Add:
    using __gnu_cxx::hash_set;

    Note that no default hash function is provided for string, you have to
    define it:
    namespace __gnu_cxx {
    template<> struct hash< std::string > {
    size_t operator()( const std::string& x ) const {
    return hash< const char* >()( x.c_str() );
    }
    };
    }

    --
    Michael
     
    Michael DOUBEZ, Jul 12, 2011
    #2
    1. Advertising

  3. eric

    Miles Bader Guest

    Michael DOUBEZ <> writes:
    > hash_set is not part of c++. It was specified in STL SGI but was not
    > included in the standard. g++ provides it as a backward compatibility
    > in the namespace __gnu_cxx.


    For a non-ancient version of g++ (or any other compiler with
    sufficient c++0x support), wouldn't it be better to just use
    "unordered_set" instead? I thought that was basically just hash_set
    with a different name (but an actual part of the standard)...

    -Miles

    --
    It wasn't the Exxon Valdez captain's driving that caused the Alaskan oil spill.
    It was yours. [Greenpeace advertisement, New York Times, 25 February 1990]
     
    Miles Bader, Jul 12, 2011
    #3
  4. On Jul 12, 10:19 am, Miles Bader <> wrote:
    > Michael DOUBEZ <> writes:
    > > hash_set is not part of c++. It was specified in STL SGI but was not
    > > included in the standard. g++ provides it as a backward compatibility
    > > in the namespace __gnu_cxx.

    >
    > For a non-ancient version of g++ (or any other compiler with
    > sufficient c++0x support), wouldn't it be better to just use
    > "unordered_set" instead?


    Yes. Even TR1 support is enough.

    > I thought that was basically just hash_set
    > with a different name (but an actual part of the standard)...


    But the OP is trying to compile examples from C++CookBook.

    --
    Michael
     
    Michael DOUBEZ, Jul 12, 2011
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. JohnZing

    declared or not declared ?

    JohnZing, Feb 5, 2006, in forum: ASP .Net
    Replies:
    3
    Views:
    1,623
    Jon Paal
    Feb 5, 2006
  2. Stan Goodman

    Even older fart, even newer newbie

    Stan Goodman, Jul 3, 2003, in forum: Java
    Replies:
    11
    Views:
    723
    Stan Goodman
    Jul 4, 2003
  3. zs
    Replies:
    1
    Views:
    757
    Rolf Magnus
    Apr 14, 2006
  4. Andreas Bogenberger
    Replies:
    3
    Views:
    1,011
    Andreas Bogenberger
    Feb 22, 2008
  5. David Charles
    Replies:
    2
    Views:
    103
    David Charles
    Jul 10, 2009
Loading...

Share This Page